Arthas 使用

Higurashi-kagome / 2024-09-27 / 原文

Arthas 是一款线上监控诊断产品,用来做线上问题排查。详细介绍见官方文档。

安装并启动

可访问外网时

下载 arthas-boot.jar,java -jar arthas-boot.jar启动程序:

$ java -jar arthas-boot.jar
* [1]: 35542
  [2]: 71560 math-game.jar

选择需要排查问题的进程的序号,math-game进程是第 2 个,则输入 2。有时候程序无法列出进程,可以使用java -jar arthas-boot.jar <PID>直接连接指定 PID 的进程。

无法访问外网时

上面执行java -jar arthas-boot.jar时需要连接外网,没有外网时:

  1. 下载全量包并解压
  2. 在解压得到的文件夹中找到arthas-boot.jar,执行java -jar arthas-boot.jar启动

简单使用

启动程序并连接到进程后:

使用 dashboard

输入dashboard,按回车/enter,会展示当前进程的实时数据面板,按 Ctrl+C 可以中断执行。

image-20240926220042373

使用 thread

输入thread,按回车/enter,会展示线程信息。

image-20240926220212735

执行thread 1会打印线程 ID 1 的栈。

image-20240926220359747

使用 jad

通过jad <className>来反编译指定类,<className>为类的全路径。

image-20240926220534726

使用 watch

通过watch demo.MathGame primeFactors returnObj命令来查看demo.MathGame#primeFactors方法的返回值。

image-20240926221119855

更多命令见命令列表。

常用命令及解析

下面将基于 MathGame.java 介绍arthas idea提供的一些常用的命令,arthas idea是一个方便生成 Arthas 命令的 IDEA 插件。

查看方法入参/返回值/异常

选中指定primeFactors的方法名,右键——Arthas Command——Quickly Get Available Command,其中提供了如下命令:

watch demo.MathGame primeFactors '{params,returnObj,throwExp}'  -n 5  -x 3 
  • watchwatch 命令用于监控指定类中的方法调用,并输出相关信息。

  • demo.MathGame:这是要监控的类的全限定名。

  • primeFactors:这是要监控的方法名。

  • '{params,returnObj,throwExp}':这是输出格式,指定了您希望在方法调用时记录的信息。

    • params:表示输出方法的参数。
    • returnObj:表示输出方法的返回值。
    • throwExp:表示输出方法抛出的异常(如果有的话)。

    可以看到三者和输出信息之间的对应关系:

    image-20240926224005706

  • -n 5:指定监控的次数。在这个例子中,-n 5 表示监控前 5 次方法调用。

  • -x 3:指定输出的参数深度。-x 3 表示在输出参数时,最大递归深度为 3。

查看方法堆栈
stack demo.MathGame primeFactors  -n 5 

image-20240926225943488

查看方法代码
jad --source-only demo.MathGame primeFactors 

image-20240926230118122

查看类中所有方法的入参/返回值/异常
watch demo.MathGame * '{params,returnObj,throwExp}'  -n 5  -x 3 

image-20240926231203215

参考:官方文档