下载 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 | |