上一篇文字已经介绍了一款jdk自带的个工具,可以看到内存中对象的垃圾回收的大体过程,然而线上排查问题,一般都会用其他的工具真正的作为排查问题的利器,今天介绍一款 Arthas 阿里开源的;
官方文档:

https://arthas.gitee.io/quick-start.html#

使用很简单
第一步下载: 执行命令

curl -O https://arthas.aliyun.com/math-game.jar

第二步启动:

java -jar math-game.jar

第三步选择: 选择一个你想监控的java进程




jvm调优 1_java


image.png


因为我只运行了了一个,他的序号为1 所以我直接输入1



jvm调优 1_jvm_02


image.png


出现log 说明启动成功,ok了

第四步查看: 输入命令 dashboard



jvm调优 1_jar_03


image.png


这就是当前这个进程的线程堆栈的详细信息
第五步: 比如我想看下其中的一个进程比如cpu飙高,我想知道问题出在了哪里,直接输入命令

thread 341

341 id 也就是图上的 sentinel-time-tick-thread 的id



jvm调优 1_jar_04


image.png


会直接告诉你,是哪行代码出了问题,真心强大,使用真心简单

第六步退出: 查找问题完毕,退出arthas

stop

 Arths 三个关键字

trace <类名> <方法名>

# 跟踪com.aaron.Arthas.TestTrace类中addUserController方法的耗时,-n选项指定捕捉结果的次数
trace -n 5 com.aaron.Arthas.TestTrace addUserController

# 跟踪com.aaron.Arthas.TestTrace类中addUserController方法的耗时,同时包含对JDK方法调用的统计
trace --skipJDKMethod false com.aaron.Arthas.TestTrace addUserController


# 跟踪com.aaron.Arthas.TestTrace类中addUserController、serviceA、serviceB方法的耗时
trace -E com.aaron.Arthas.TestTrace addUserController|serviceA|serviceB

# 跟踪com.aaron.Arthas.TestTrace类中方法名以add2开头的方法耗时
trace -E com.aaron.Arthas.TestTrace add2.*


monitor
该命令可以对方法进行监控,监控指标包括调用次数、成功次数、失败次数、平均RT(平均响应时间)、失败率


# 指定类名、方法名即可。同时-c选项表示统计周期,单位为秒。默认为120秒
monitor -c 5  com.aaron.Arthas.TestMonitor calc

# 对TestMonitor的calc方法,当第一个参数值为false时进行监控
monitor -b -c 5  com.aaron.Arthas.TestMonitor calc "params[0] == false"




watch
便于观察指定方法的调用情况。具体地,可以观察到:方法入参、方法返回值、方法抛出异常。故watch命令定义了4个观察事件点。并提供了对应的方法选项