1. Arthas简介
Arthas
是Alibaba
开源的Java
诊断工具,深受开发者喜爱。
当你遇到以下类似问题而束手无策时,Arthas
可以帮助你解决:
- 这个类从哪个jar包加载的?为什么会报各种类相关的Exception?
- 我改的代码为什么没有执行到?难道是我没commit?分支搞错了?
- 遇到问题无法在线上debug,难道只能通过加日志再重新发布吗?
- 线上遇到某个用户的数据处理有问题,但线上同样无法debug,线下无法重现!
- 是否有一个全局视角来查看系统的运行状况?
- 有什么办法可以监控到JVM的实时运行状态?
- 怎么快速定位应用的热点,生成火焰图?
- 怎样直接从JVM内查找某个类的实例?
Arthas
支持JDK 6+
,支持Linux/Mac/Windows
,采用命令行交互模式,同时提供丰富的 Tab
自动补全功能,进一步方便进行问题的定位和诊断。
说了一大堆,其实Arthas
最厉害的地方就在于,能够让你在线上环境没有日志的情况下进行调试程序,定位问题。
2. Arthas快速入门
- 首先在
IDEA
的插件Marketplace
中找到arthas idea
这款插件,安装;可以点击这里查看插件详情~ - 打开线上环境的
terminal
,执行以下语句
curl -O https://arthas.aliyun.com/arthas-boot.jar java -jar arthas-boot.jar
3.然后会出现如下界面
[INFO] arthas-boot version: 3.6.2 [INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER. * [1]: 592 arthas-boot.jar [2]: 1 /data0/www/htdocs/code/lib/XXXXXXX.jar [3]: 403 arthas-boot.jar [4]: 295 arthas-boot.jar [5]: 503 arthas-boot.jar
- 选择应用的
java
进程即可; - 比如我的应用的
java
进程是第2
个,则输入2
,再输入回车/enter
。Arthas
会attach
到目标进程上,并输出日志:
[INFO] arthas home: /root/.arthas/lib/3.6.2/arthas [INFO] Try to attach process 1 [INFO] Attach process 1 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.6.2 main_class pid 1 time 2022-06-30 18:24:02
6.然后如何在没有日志的情况下,像在本地一样调试线上的代码呢?首先定位到想要查看的方法(Arthas
只支持到方法级别)
- 在想要定位的方法上点击右键,选择
Arthas Command
,选择Watch
; - 回到
terminal
的界面粘贴命令
[arthas@1]$ watch com.XX.XXX.XXX.XXX XXXX '{params,returnObj,throwExp}' -n 5 -x 3
- 默认
-n 5
,代表命令执行最大次数为5
次;可以手动更改; - 然后
terminal
中就会显示该方法的入参和出参,就像在本地调试一样方便~