Press "Enter" to skip to content

Arthas 使用技巧

快速开始

官方文档: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
  • 命令参数解析
    • -ttt 命令有很多个主参数,-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

  1. 检查当前用户和目标java进程是否一致。如果不一致,则切换到同一用户。JVM只能attach同样用户下的java 进程。
  2. 尝试使用 jstack -l $pid,如果进程没有反应,则说明进程可能假死,无法响应JVM attach信号。所以同样基于attach机制的Arthas无法工作。尝试使用jmap heapdump后分析。
  3. 尝试按quick-start里的方式attach math-game。
  4. 更多情况参考: https://github.com/alibaba/arthas/issues/347
发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注