arthas入门

Arthas是阿里的一款开源的JVM的监控分析工具。可以通过jar包或者直接脚本运行。读音类似阿尔萨斯?

  1. JVM相关

1.1 dashboard 可以直接看实时的数据面板

1.2 jvm查看当前jvm的信息

1.3 thread. thread可以查看JVM下所有线程的状态,thread tid可以查看具体一个线程的堆栈状态等信息。 thread -n 5 可以查看使用CPU前5的线程; thread -b 可以查看锁住了其他线程的线程; -i 指定定期刷新间隔

  1. class/class loader相关

2.1 sc className 查看JVM已加载的类信息,支持正则表达式 -d更详细

2.2 sm className methodName 查看method信息。 同样-d更详细

  1. 实时监控

3.1 monitor 方法执行监控, 能看方法能够成功执行以及对方法执行时间计时,比如 monitor -c 5 demo.MathGame primeFactors

3.2 watch 方法执行数据观测, 能看方法的入参和返回值。 如 watch demo.MathGame primeFactors “{params, returnObj}” -x 2。 watch定义了四个观察事件点,分别是 -b(方法调用前), -e(方法异常之后), -s(方法返回后), -f(方法结束后). 默认是 -f 所以默认情况下观察到的入参可能不是真正的入参,因为可能在执行中被修改过

3.3 stack 当前方法的调用路径

需要注意的是这些这些命令都是通过字节码增强技术实现的,结束要shutdown

  1. 动态修改

4.1 jad 方法反编译。jad –source-only 类名 > java文件指定路径. 可以反编译出Java文件

4.2 mc 把Java文件编译成class文件。 mc java文件路径 -d /路径

4.3 redefine redefine命令可以加载新的class文件。 redefine /路径/class文件 热替换。但是redefine的文件里,不能新增加 field/method

这三个综合起来用可以实现热替换的功能,比如加一行日志之类的

  1. 动态修改日志级别

logger 查看日志配置信息

logger -c ClassLoaderCode –name ROOT –level 目标level

logger -c ClassLoaderCode -n Package-Path –level 目标level

Written on August 8, 2019