快速开始
官方文档:https://arthas.aliyun.com/doc/
快速启动arthas(使用和目标进程一致的用户启动,否则可能attach失败)
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
常用命令
- dashboard
查看数据大屏,宏观的系统运行状况。
- thread
查看线程状况。
thread -n 10
:查看消耗CPU排名前十的线程栈。
thead -b
: 找出阻塞其他线程的线程。
thread -i 1000
: 控制采样间隔,默认采样200ms,
thread -n 3 -i 1000
: 列出1000ms内最忙的3个线程栈
- trace
跟踪方法内部调用路径,并输出方法路径上的每个节点上耗时。
trace com.demo.controller.* * "#cost > 1000"
: 跟踪controller包下面所有类的 所有方法,耗时超过1000ms的打印出来。
- tt
方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
watch
虽然很方便和灵活,但需要提前想清楚观察表达式的拼写,这对排查问题而言要求太高,因为很多时候我们并不清楚问题出自于何方,只能靠蛛丝马迹进行猜测。
这个时候如果能记录下当时方法调用的所有入参和返回值、抛出的异常会对整个问题的思考与判断非常有帮助。
于是乎,TimeTunnel 命令就诞生了。
$ tt -t demo.MathGame primeFactors
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 66 ms.
INDEX TIMESTAMP COST(ms) IS-RET IS-EXP OBJECT CLASS METHOD
-------------------------------------------------------------------------------------------------------------------------------------
1000 2018-12-04 11:15:38 1.096236 false true 0x4b67cf4d MathGame primeFactors
1001 2018-12-04 11:15:39 0.191848 false true 0x4b67cf4d MathGame primeFactors
1002 2018-12-04 11:15:40 0.069523 false true 0x4b67cf4d MathGame primeFactors
1003 2018-12-04 11:15:41 0.186073 false true 0x4b67cf4d MathGame primeFactors
1004 2018-12-04 11:15:42 17.76437 true false 0x4b67cf4d MathGame primeFactors
- 命令参数解析
-t
tt 命令有很多个主参数,-t
就是其中之一。这个参数的表明希望记录下类*Test
的print
方法的每次执行情况。-n 3
当你执行一个调用量不高的方法时可能你还能有足够的时间用CTRL+C
中断 tt 命令记录的过程,但如果遇到调用量非常大的方法,瞬间就能将你的 JVM 内存撑爆。此时你可以通过-n
参数指定你需要记录的次数,当达到记录次数时 Arthas 会主动中断tt命令的记录过程,避免人工操作无法停止的情况。
高级用法 获取spring context 调用bean 方法
tt -i 1000 -w 'target.getApplicationContext()'
target process not responding or HotSpot VM not loaded
com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded
- 检查当前用户和目标java进程是否一致。如果不一致,则切换到同一用户。JVM只能attach同样用户下的java 进程。
- 尝试使用
jstack -l $pid
,如果进程没有反应,则说明进程可能假死,无法响应JVM attach信号。所以同样基于attach机制的Arthas无法工作。尝试使用jmap
heapdump后分析。 - 尝试按quick-start里的方式attach math-game。
- 更多情况参考: https://github.com/alibaba/arthas/issues/347