JVM之GC 调优工具 Arthas 实战使用(二)

Arthas Alibaba 开源的 Java 诊断工具,深受开发者喜爱。Arthas 支持 JDK 6以上版本,支持 Linux/Mac/Windows,而且这些环境的命令都一样,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进行问题的定位和诊断

官方文档参考 https://alibaba.github.io/arthas/
一、下载和安装
不需要安装,就是一个 jar
curl -O https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
启动 arthas jar 包是 arthas-boot.jar
二、快速入门
1 、直接 java -jar arthas-boot.jar 。选择 attach 的进程绑定一步方便进行问题的定位和诊断
2、 通过 jps 命令快速查找 java 进程,再次直接绑定 java -jar arthas-boot.jar pid 启动 arthas 工具 attach 到目标进程
JVM之GC 调优工具 Arthas 实战使用(二)
进入 arthas 后命令行前面出现标识  :[[email protected]]$,都是很有规律的。
 
三、常用命令
1、Dashboard   仪表盘作用的命令
注意在 arthas 中,有 tab 键填充功能,所以比较好用。但是这个界面是实时刷新的,一般 5s 刷新一次,使用 q 键退出刷新(没有退出 arthasq
JVM之GC 调优工具 Arthas 实战使用(二)

每一列的意义: 

JVM之GC 调优工具 Arthas 实战使用(二)
2、Thread
这个命令和 jstack 很相似,但是功能更加强大,主要是查看当前 JVM 的线程堆栈信息
同时可以结合使用 thread –b 来进行死锁的排查死锁。
参数解释:
-n 指定最忙的前 n 个线程并打印堆栈 -b 找出阻塞当前线程的线程
-i 指定 cpu 占比统计的采样间隔,单位为毫秒
实战演示
thread 显示线程信息
JVM之GC 调优工具 Arthas 实战使用(二)
thread –h 显示帮助
JVM之GC 调优工具 Arthas 实战使用(二)
 
 
thread –b 找出阻塞当前线程的线程,如图:
JVM之GC 调优工具 Arthas 实战使用(二)
 
如果有死锁,会有红色的字提醒着,这个阻塞的线程已经被另外一个线程阻塞。
 
thread -i 1000 -n 3 每过 1000 毫秒进行采样,显示最占 CPU 时间的前 3 个线程
JVM之GC 调优工具 Arthas 实战使用(二)
 
thread --state WAITING 查看处于等待状态的线程
JVM之GC 调优工具 Arthas 实战使用(二)
 
3、JVM
 
JVM之GC 调优工具 Arthas 实战使用(二)
4、Jad
反编译指定已加载类的源码
JVM之GC 调优工具 Arthas 实战使用(二)
JVM之GC 调优工具 Arthas 实战使用(二)
5、trace
 
使用 trace 命令可以跟踪统计方法耗时。 继续跟踪耗时高的方法,然后再次访问 比如使用一个 Springboot 项目(当然,不想 Springboot 的话,你也可以直接在 UserController main 方法启动)控制层 getUser 方法调用
userService.get(uid); ,这个方法中分别进行 check service redis mysql 等操作操作。就可以根据这个命令跟踪出来哪里的耗时最长。
 
 
 
JVM之GC 调优工具 Arthas 实战使用(二)
 
访问一次:
JVM之GC 调优工具 Arthas 实战使用(二)
6、monitor
5 秒统计一次 cn.enjoyedu.demo.controller.DemoController 类的 test 方法执行情况
 
JVM之GC 调优工具 Arthas 实战使用(二)
 
JVM之GC 调优工具 Arthas 实战使用(二)
调用方法后 5 秒刷新一次
JVM之GC 调优工具 Arthas 实战使用(二)
7、watch 命令观察方法的入参出参信息
# 查看入参和出参,现在调用两次看效果:
$ watch cn.enjoyedu.demo.controller.DemoController test '{params[0],returnObj}'
JVM之GC 调优工具 Arthas 实战使用(二)
 
8、主要命令汇总:
 
 
JVM之GC 调优工具 Arthas 实战使用(二)
JVM之GC 调优工具 Arthas 实战使用(二)
 
 
Arthas 工具使用主要是这么多,下一篇我们分析它的原理 Java Agent 技术,敬请期待!