阿里巴巴Arthas是一种诊断工具,使我们能够监控、分析和排除Java应用程序的故障。下面,我们将首先安装Arthas,然后通过案例来演示Arthas的一些关键功能。
下载
首先,我们可以使用curl下载Arthas:
curl -O https://arthas.aliyun.com/arthas-boot.jar |
如果成功,我们应该看到显示所有命令的帮助指南:
案例分析
启动math-game
下载启动math-game.jar:
curl -O https://arthas.aliyun.com/math-game.jar |
启动arthas
启动arthas-boot.jar:
java -jar arthas-boot.jar |
arthas会提示一个菜单来选择我们要附加到哪个进程:
让我们选择名称为math-game.jar的那个,只需要输入前面的数字,在上图中为“1”,然后按Enter。
Arthas现在将附加到这个进程并开始。
我们可以通过help命令来获取有关可用选项的更多信息。
dashboard
输入dashboard,按回车,会展示当前线程的信息,按 q或ctrl+c 可以中断执行。
上图各项内容,从上往下、从左往右依次表示:
- 顶部用于显示当前运行的线程
- 最重要的列之一,是每个线程CPU消耗的百分比
- 显示每个线程的CPU时间
- 用于内存分析,列出各个不同的内存区域及其统计信息。在右侧还可以了解GC相关的信息
- 展示关于主机平台和JVM的信息
thread
我们可以通过dashboard找出CPU占用较多的线程,然后通过下面定位对应的线程:
thread 1 |
作为参数传递的数字是线程id,通常1是main函数的线程
反编译java类
我们可以通过arthas来反编译我们正在运行的java应用的类
jad demo.MathGame |
搜索类
search class命令在搜索JVM中加载的类时会派上用场。
sc *MathGame* |
一旦我们有了类的名称,我们就可以使用两个额外的标志来查找更多的信息
sc -df demo.MathGame |
- -d显示类的详细信息
- -f显示类的字段
搜索方法
同样可以使用sm命令来搜索类中已加载的方法
sm demo.MathGame |
我们也可以使用-d来检索方法的详细信息
sm -d demo.MathGame primeFactors |
watch
通过watch命令追踪 demo.MathGame 类 primeFactors 方法的返回值
watch demo.MathGame primeFactors returnObj |
火焰图
我们可以通过 profiler start 来运行分析器,这是个非阻塞任务,即不会影响到工作线程。通过 profiler stop 停止分析器,此时会保存一个 FlameGraph 图像。
可以通过观察上图发现CPU时间花费在哪里。