Java诊断工具Arthas入门教程
Arthas(阿尔萨斯)能干什么
Arthas
是Alibaba开源的Java
诊断工具,它能帮你解决以下问题:
- 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
- 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
- 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
- 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
- 是否有一个全局视角来查看系统的运行状况?
- 有什么办法可以监控到JVM的实时运行状态?
下载与安装
Linux安装
下载arthas-boot(推荐)
下载arthas-boot.jar
,然后用java -jar
的方式启动:
wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
打印帮助信息:
java -jar arthas-boot.jar -h
- 如果下载速度比较慢,可以使用aliyun的镜像:java -jar arthas-boot.jar --repo-mirror aliyun --use-http
下载as.sh
Arthas 支持在 Linux/Unix/Mac 等平台上一键安装,请复制以下内容,并粘贴到命令行中,敲 回车 执行即可:
curl -L https://alibaba.github.io/arthas/install.sh | sh
上述命令会下载启动脚本文件 as.sh
到当前目录,你可以放在任何地方或将其加入到 $PATH
中。
直接在shell下面执行./as.sh
,就会进入交互界面。
也可以执行./as.sh -h
来获取更多参数信息。
下载离线版本
Arthas
最新版本为3.1.1
,点我下载,得到离线包arthas-packaging-3.1.1-bin.zip
上传到服务器,解压到arthas
目录
unzip arthas-packaging-3.1.1-bin.zip -d arthas
安装启动
cd arthas
sh install-local.sh
./as.sh
或运行jar启动
java -jar arthas-boot.jar
Widows安装
离线包arthas-packaging-3.1.1-bin.zip
,解压后在根目录有 as.bat
。此脚本暂时只接受一个参数 pid
,即只能诊断本机上的 Java 进程,java
进程pid
可使用jps
命令查看,启动命令如下:
as.bat <pid>
或使用jar
启动
java -jar arthas-boot.jar
启动与退出
普通启动
java -jar arthas-boot.jar
启动时指定对外开放ip,允许远程连接,客户端可以通过该ip连接服务器上的arthas
,默认端口为3658
java -jar arthas-boot.jar --target-ip 192.168.132.132
上述命令其实是启动了arthas服务端,同时启动了一个客户端连接到该服务端
启动后会将java进程列出来
rkyao@ubuntu:/usr/local/arthas$ java -jar arthas-boot.jar
[INFO] arthas-boot version: 3.1.0
[INFO] Found existing java process, please choose one and hit RETURN.
* [1]: 4873 arthas-test.jar
[2]: 5196 arthas-spring-test-0.0.1-SNAPSHOT.jar
假如想要监控第一个进程,则输入1,再输入回车/enter。Arthas会attach到目标进程上,并输出日志:
[INFO] arthas home: /home/rkyao/.arthas/lib/3.1.0/arthas
[INFO] Try to attach process 4873
[INFO] Attach process 4873 success.
[INFO] arthas-client connect 127.0.0.1 3658
,---. ,------. ,--------.,--. ,--. ,---. ,---.
/ O \ | .--. ''--. .--'| '--' | / O \ ' .-'
| .-. || '--'.' | | | .--. || .-. |`. `-.
| | | || |\ \ | | | | | || | | |.-' |
`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----'
wiki: https://alibaba.github.io/arthas
version: 3.1.0
pid: 4873
time: 2019-04-25 23:51:54
$
然后就可以输入命令进行各种操作,如查看dashboard,则输入dashboard
并按回车
即可
$ dashboard
中断当前在执行的命令,ctrl + c
即可
退出当前 Arthas
客户端(服务端没有关闭,仍在后台运行并且还attach在之前指定的进程上)
quit
关闭服务端,所有 Arthas
客户端全部退出
shutdown
客户端远程连接
远端服务器上已经启动了一个arthas服务,我们想连接这个服务,可以有两种方式,arthas
服务的信息如下:
ip:192.168.132.132
Web console
Web console
是arthas
自带的管理界面,浏览器访问 http://192.168.132.132:8563/
即可打开,界面里IP
和Port输入框中填入对应信息即可连接。
arthas-client
arthas
提供了一个名为arthas-client.jar
的客户端jar包,可使用该jar
连接服务端,使用如下命令:
java -jar arthas-client.jar 192.168.132.132 3658
cmd命令行
直接使用windows
命令行,先按win+R
再输入cmd
打开命令行,然后输入如下命令:
telnet 192.168.132.132 3658
常用命令
首先准备一段代码用于演示命令,类全路径:com.rkyao.arthas.controller.ArthasController
,方法名:testControllerMethod
dashboard命令显示当前系统的实时数据面板,如CPU占比, 错误数, 线程池信息等
watch命令观察接口参数和返回值
watch com.rkyao.arthas.controller.ArthasController testControllerMethod "{params,returnObj}" -x 2
debug命令重放请求
首先执行如下命令,监控请求方法
tt -t com.rkyao.arthas.controller.ArthasController testControllerMethod
然后调用该请求,可以看到捕获到的请求信息
找到请求对应的index
,本例中为1000
,然后执行命令重放请求
tt --play -i 1000
jad命令查看反编绎的源代码(指定类)
jad com.rkyao.arthas.controller.ArthasController
jad命令查看反编绎的源代码(指定类的方法)
jad com.rkyao.arthas.controller.ArthasController testControllerMethod
trace命令渲染和统计整个调用链路上的所有性能开销和追踪调用链路,很方便的定位性能瓶颈
trace com.rkyao.arthas.controller.ArthasController testControllerMethod
相关链接
GitHub地址: https://github.com/alibaba/arthas
Arthas用户文档:https://alibaba.github.io/arthas/
更多推荐
所有评论(0)