JVM调优工具--Arthas(一)入门
Arthas
是Alibaba开源的Java诊断工具,深受开发者喜爱。
当你遇到以下类似问题而束手无策时,Arthas
可以帮助你解决:
-
这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
-
我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
-
遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
-
线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
-
是否有一个全局视角来查看系统的运行状况?
-
有什么办法可以监控到JVM的实时运行状态?
-
怎么快速定位应用的热点,生成火焰图?
github地址: https://github.com/alibaba/arthas
Gitee文档全文:https ://arthas.gitee.io/
一. 下载
1. 下载全量包
1.1 从Maven仓库下载
最新版本,点击下载:如果下载速度比较慢,可以尝试用阿里云的镜像仓库,比如要下载3.x.x
版本(替换3.x.x
为最新版本),下载的url是:
https://maven.aliyun.com/repository/public/com/taobao/arthas/arthas-packaging/3.x.x/arthas-packaging-3.x.x-bin.zip
2. 用as.sh启动
解压后,在文件夹里有as.sh
,直接用./as.sh
的方式启动:
./as.sh
打印帮助信息:
./as.sh -h
3. 用arthas-boot启动
或者在解压后,在文件夹里有arthas-boot.jar
,直接用java -jar
的方式启动:
java -jar arthas-boot.jar
打印帮助信息:
java -jar arthas-boot.jar -h
二. 快速安装
1. 使用arthas-boot
(推荐)
下载arthas-boot.jar
,然后用java -jar
的方式启动:
curl -O 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
- 如果从github下载有问题,可以使用gitee镜像:
curl -O https://arthas.gitee.io/arthas-boot.jar
2. 启动提示:Can not find java process. Try to pass <pid> in command line
----需要先启动进程,再来启动arthas
三. 快速入门
1. 启动Demo
curl -O https://alibaba.github.io/arthas/arthas-demo.jar java -jar arthas-demo.jar
arthas-demo
是一个简单的程序,每隔一秒生成一个随机数,再执行质因数分解,并打印出分解结果。
2. 启动arthas
在命令行下面执行(使用和目标进程一致的用户启动,否则可能attach失败):
java -jar arthas-boot.jar
-
执行该程序的用户需要和目标进程具有相同的权限。比如以
admin
用户来执行:sudo su admin && java -jar arthas-boot.jar
或sudo -u admin -EH java -jar arthas-boot.jar
。 -
如果attach不上目标进程,可以查看
~/logs/arthas/
目录下的日志。 -
如果下载速度比较慢,可以使用aliyun的镜像:
java -jar arthas-boot.jar --repo-mirror aliyun --use-http
-
java -jar arthas-boot.jar -h
打印更多参数信息。
选择应用java进程:
Demo进程是第2个,则输入2,再输入回车/enter
。Arthas会attach到目标进程上,并输出日志:
3. 查看dashboard
输入dashboard,按回车/enter
,会展示当前进程的信息,按ctrl+c
可以中断执行。
4. 通过thread命令来获取到arthas-demo
进程的Main Class
thread 1
会打印线程ID 1的栈,通常是main函数的线程。
thread 1 | grep 'main('
5. 通过jad来反编译Main Class
jad demo.MathGame
6. watch
通过watch命令来查看demo.MathGame#primeFactors
函数的返回值:
watch demo.MathGame primeFactors returnObj
7. 退出arthas
如果只是退出当前的连接,可以用quit
或者exit
命令。Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。
如果想完全退出arthas,可以执行stop
命令。