Arthas使用指南
常用命令: trace -E com.topsoft.aaf.web.controller.outer.v2.authclient.OrganAction getUserSimpleByResCode -v -n 5 '#cost>2000'
原文:https://www.jianshu.com/p/95449939cca3
Arthas
一、简介
Arthas 是Alibaba开源的Java诊断工具。安装在系统所在服务器。可以帮助开发人员或者运维人员查找问题,分析性能,bug追踪。
二、解决什么问题 & 适用场景
解决问题:
1、以全局视角来查看系统的运行状况、健康状况。
2、反编译源码,查看jvm加载的是否为预期的文件内容。
3、查看某个方法的返回值,参数等等。
4、方法内调用路径及各方法调用耗时。
5、查看jvm运行状况。
6、外部.class文件重新加载到jvm里。
等等.....
场景:
1)调用接口时,接口返回异常信息,如果该异常信息没有清晰的定位到代码,那么我们通常只能依靠大脑回忆代码,来估计错误发生地了,如果无法估计,一般情况下就会进入测试环境,模拟复现,如果无法复现 _。
2)这个查询,耗时20s,我们想要分析一下到底是哪些代码导致的。但是该方法内部又穿插调用了其它业务功能方法,难道手写System.currentTimeMillis()自己做减运算,还是guava的StopWatch亦或是commons的StopWatch?这几种方式需要我们手动嵌入代码,容易遗漏、费力还费时。
等等,就不一一举例了。
arthas可以为我们解决上述问题,帮助程序员尽早下班,尽早交代。
三、安装&启动
启动: java -jar arthas-boot.jar
[INFO] arthas-boot version: 3.0.5.2
[INFO] Process 6020 already using port 3658
[INFO] Process 6020 already using port 8563
[INFO] Found existing java process, please choose one and hit RETURN.
*[1]: 6020 org.apache.catalina.startup.Bootstrap
[2]: 16420 org.apache.catalina.startup.Bootstrap
[3]: 7833 org.apache.catalina.startup.Bootstrap
[4]: 19036 org.apache.catalina.startup.Bootstrap
出现上述命令提示,是因为在这个服务器上,存在4个正在运行的java程序,而序号之后的数字就是pid,我们选取对应的pid,然后回车即可。
[INFO] arthas home: /root/.arthas/lib/3.1.4/arthas
[INFO] The target process already listen port 3658, skip attach.
[INFO] arthas-client connect 127.0.0.1 3658
,---. ,------. ,--------.,--. ,--. ,---. ,---.
/ O \ | .--. ''--. .--'| '--' | / O \ ' .-'
| .-. || '--'.' | | | .--. || .-. |`. `-.
| | | || |\ \ | | | | | || | | |.-' |
`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----'
wiki https://alibaba.github.io/arthas
tutorials https://alibaba.github.io/arthas/arthas-tutorials
version 3.1.4
pid 6020
time 2019-10-14 17:56:41
[arthas@6020]$
启动成功!
四、相关命令
仅以主要的几个命令作为展示,具体命令及参数可以参阅官方文档。
1)输入dashboard,回车,仪表盘显示当前进程相关信息。
____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
| ①Thread相关信息
| 线程id 线程名称 线程组 线程优先级 线程状态 线程消耗的cpu百分比 运行总时间 线程当前的中断位状态 是否守护线程
| ID NAME GROUP PRIORITY STATE %CPU TIME INTERRUPTED DAEMON
| 188 Timer-for-arthas-dashboard-f5864b5b-762a-4fb5-8cc5-65559bd6 system 10 RUNNABLE 19 0:0 false true
| 36 pool-1-thread-1 main 5 TIMED_WAITING 5 0:1 false false
| 33 Abandoned connection cleanup thread main 5 TIMED_WAITING 0 0:0 false true
| 179 AsyncAppender-Worker-arthas-cache.result.AsyncAppender system 9 WAITING 0 0:0 false true
| 12 AsyncFileHandlerWriter-225534817 main 5 TIMED_WAITING 0 0:0 false true
| 94 Attach Listener system 9 RUNNABLE 0 0:0 false true
| 70 ContainerBackgroundProcessor[StandardEngine[Catalina]] main 5 TIMED_WAITING 0 0:0 false true
| 34 Druid-ConnectionPool-Create-300669762 main 5 WAITING 0 0:0 false true
| 35 Druid-ConnectionPool-Destroy-300669762 main 5 TIMED_WAITING 0 0:0 false true
| 3 Finalizer system 8 WAITING 0 0:0 false true
| 13 GC Daemon system 2 TIMED_WAITING 0 0:0 false true
| 14 NioBlockingSelector.BlockPoller-1 main 5 RUNNABLE 0 0:0 false true
| 15 NioBlockingSelector.BlockPoller-2 main 5 RUNNABLE 0 0:0 false true
| 2 Reference Handler system 10 WAITING 0 0:0 false true
| 4 Signal Dispatcher system 9 RUNNABLE 0 0:0 false true
| 76 ajp-nio-38009-Acceptor-