下载 arthas jar
1 |
|
启动 Arthas 服务
1 |
|
命令列表
dashboard
当前系统的实时数据面板
1 |
|
thread
查看当前线程信息,查看线程的堆栈
1 |
|
jad
反编译指定已加载类的源码
1 |
|
sc
查看JVM已加载的类信息
1 |
|
sm
查看已加载类的方法信息
sm(Search-Method)
命令只能看到由当前类所声明 (declaring) 的方法,父类则无法看到。
1 |
|
watch
方法执行数据观测。 让你能方便的观察到指定方法的调用情况。能观察到的范围为:返回值
、抛出异常
、入参
,通过编写 OGNL 表达式进行对应变量的查看。
1 |
|
monitor
方法执行监控
1 |
|
dump
dump 已加载类的 bytecode 到特定目录
1 |
|
heapdump
dump java heap, 类似jmap命令的heap dump功能
1 |
|
stack
输出当前方法被调用的调用路径
1 |
|
需要调用接口并且接口中会调用到监控的方法
trace
方法内部调用路径,并输出方法路径上的每个节点上耗时
1 |
|
trace
能方便的帮助你定位和发现因 RT 高而导致的性能问题缺陷,但其每次只能跟踪一级方法的调用链路。
tt
记录下指定方法每次调用的入参和返回信息。 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
1 |
|
- 解决方法重载
- tt -t *Test print params.length==1
- 通过制定参数个数的形式解决不同的方法签名,如果参数个数一样,你还可以这样写
- tt -t *Test print ‘params[1] instanceof Integer’
- 解决指定参数
- tt -t *Test print params[0].mobile==”13989838402”
tt -t
结果表格字段说明
表格字段 | 字段解释 |
---|---|
INDEX | 时间片段记录编号,每一个编号代表着一次调用,后续tt还有很多命令都是基于此编号指定记录操作,非常重要。 |
TIMESTAMP | 方法执行的本机时间,记录了这个时间片段所发生的本机时间 |
COST(ms) | 方法执行的耗时 |
IS-RET | 方法是否以正常返回的形式结束 |
IS-EXP | 方法是否以抛异常的形式结束 |
OBJECT | 执行对象的hashCode() ,注意,曾经有人误认为是对象在JVM中的内存地址,但很遗憾他不是。但他能帮助你简单的标记当前执行方法的类实体 |
CLASS | 执行的类名 |
METHOD | 执行的方法名 |
options
全局开关
1 |
|
vmoption
查看,更新VM诊断相关的参数
1 |
|