Java 应用诊断利器,Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。有如下特性
- Dashboard面板:实时查看系统的运行状况
- 查看入参/返回值/异常:查看函数调用的参数,返回值和异常
- 在线热更新:jad/sc/redefine 一条龙热更新代码
- 类冲突:秒解类冲突问题,定位类加载路径
- 性能热点:快速定位应用的热点,生成火焰图
- WebConsole:在线诊断,点开网页诊断线上应用
Github:https://github.com/alibaba/arthas
1.1 启动Demo
下载可执行文件jar包
curl -O https://arthas.aliyun.com/arthas-demo.jar
执行程序命令:java -jar arthas-demo.jar -h
,打印如下信息
:arthas xxxxx$ java -jar arthas-demo.jar -h
114374=2*13*53*83
illegalArgumentCount: 1, number is: -105385, need >= 2
82427=139*593
illegalArgumentCount: 2, number is: -140560, need >= 2
illegalArgumentCount: 3, number is: -176536, need >= 2
74829=3*24943
illegalArgumentCount: 4, number is: -13745, need >= 2
1.2 启动arthas
再打开另外一个可执行窗口终端,并下载可执行文件jar包
curl -O https://arthas.aliyun.com/arthas-boot.jar
执行程序命令:java -jar arthas-boot.jar
,打印如下信息
:arthas xxxxx$ java -jar arthas-boot.jar
[INFO] arthas-boot version: 3.5.0
[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
* [1]: 9221 arthas-demo.jar
根据他提示,选择要监控的程序的序列号并输入到控制台,整体如下。Demo进程是第1个,则输入1,再输入回车/enter
。Arthas会attach到目标进程上,并输出日志
:arthas xxxxx$ java -jar arthas-boot.jar
[INFO] arthas-boot version: 3.5.0
[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
* [1]: 9221 arthas-demo.jar
1
[INFO] arthas home: /Users/Aion/.arthas/lib/3.5.0/arthas
[INFO] Try to attach process 9221
[INFO] Attach process 9221 success.
[INFO] arthas-client connect 127.0.0.1 3658
,---. ,------. ,--------.,--. ,--. ,---. ,---.
/ O \ | .--. ''--. .--'| '--' | / O \ ' .-'
| .-. || '--'.' | | | .--. || .-. |`. `-.
| | | || |\ \ | | | | | || | | |.-' |
`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----'
wiki https://arthas.aliyun.com/doc
tutorials https://arthas.aliyun.com/doc/arthas-tutorials.html
version 3.5.0
main_class demo.MathGame
pid 9221
time 2021-04-15 10:00:03
[arthas@9221]$
执行成功后,可以使用一些官方提供的命令来监控。
1.3 查看dashboard
可以在命令行窗口输入命令dashboard
,然后可以看到当前系统实时数据面板数据。也可以登录到PC页面来查看实时数据面板默认的访问地址为http://localhost:8563/ 。
其他操作参考附录
1.4 卸载/删除arthas
- 在 Linux/Unix/Mac 平台
删除下面文件:
rm -rf ~/.arthas/
rm -rf ~/logs/arthas
- Windows平台
直接删除user home下面的.arthas
和logs/arthas
目录
1.5 命令
基础命令列表
命令 | 说明 | 备注 |
help | 看命令帮助信息 | |
cls | 清空当前屏幕区域 | |
session | 查看当前会话的信息 | |
reset | 重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类 | |
version | 输出当前目标 Java 进程所加载的 Arthas 版本号 | |
history | 打印命令历史 | |
quit | 退出当前 Arthas 客户端,其他 Arthas 客户端不受影响 | |
exit | 退出当前 Arthas 客户端,其他 Arthas 客户端不受影响 | |
stop | 完全退出arthas | |
shutdown | 关闭 Arthas 服务端,所有 Arthas 客户端全部退出 | |
keymap | Arthas快捷键列表及自定义快捷键 | |
增强命令列表
命令 | 说明 | 备注 |
dashboard | 当前系统的实时数据面板。 | |
thread | 查看当前线程信息,查看线程的堆栈。 | |
jvm | 查看当前JVM信息 | |
sysprop | 查看当前JVM的系统属性(System Property) | |
sysenv | 查看当前JVM的环境属性(System Environment Variables) | |
getstatic | 通过getstatic命令可以方便的查看类的静态属性。使用方法为getstatic class_name field_name | |
ognl | 执行ognl表达式 | |
sc | 查看JVM已加载的类信息,这个命令支持的参数有 [d]、[E]、[f] 和 [x:] | |
sm | sm 命令只能看到由当前类所声明 (declaring) 的方法,父类则无法看到 | |
dump | dump 已加载类的 bytecode 到特定目录 | |
jad | 反编译指定已加载类的源码 | |
classloader | 查看classloader的继承树,urls,类加载信息 | |
redefine | 加载外部的.class文件,redefine jvm已加载的类。 | |
monitor | 方法执行监控,对匹配 class-pattern/method-pattern的类、方法的调用进行监控 | |
watch | 方法执行数据观测,能方便的观察到指定方法的调用情况 | |
trace | 方法内部调用路径,并输出方法路径上的每个节点上耗时 | |
stack | 输出当前方法被调用的调用路径 | |
tt | 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息。 | |
options | 全局开关 |
FAQ
Q1: try to set the same JAVA_HOME
Target VM JAVA_HOME is HOME/Contents/jbr/Contents/Home, arthas-boot JAVA_HOME is JRR_HOME/Home/jre, try to set the same JAVA_HOME
A1
不知道怎么处理,我这边重新启动就可以了