Arthas
1、将Arthas的作用
Arthas的功能包括进程状态查看、Java类、方法的查找和监控、异常信息分析、线程状态监控、JVM统计信息查看等。
而运维只需要将目标关注于监控、异常信息分析、线程状态监控、JVM统计信息查看。
Arthas对于java程序是毫无影响的。
2、Arthas的使用
2.1耗时操作查询(单机版)
2.1.1 Arthas启动
-
启动Arthas工具(非全量安装)
#命令行启动 $ java -jar arthas-boot.jar
-
启动成功后列出本地机器的所有java进程
输入对应标号选择对应的java项目,图中所示进入标题为2的arthas-demo.jar项目
-
另一种方式启动Arthas工具:通过java进程的pid,这样可以直接进入带对应的jar程序(非全量安装)
#命令行启动 $ java -jar arthas-boot.jar pid
-
另一种方式启动Arthas工具:通过bat或者通过sh命令启动(全量安装)
#Linux环境下,通过以下命令启动-仅提供linux下 $ ./as.sh
-
选择项目完成后会进入到Arthas操作命令行
使用trace -E +包名 命令是可以查找出对应service包全部中的操作
#使用trace命令查询某个方法内部调用路径 $ trace -E com.test.ClassA|org.test.ClassB method1|method2|method3
2.1.2 查找耗时操作
1、dashboard :
- 查看程序详细信息,dashboard命令可以查看cpu、线程状态,内存信息、GC情况和jdk版本等信息
#dashboadr命令输出信息解读
ID: Java中的线程ID,注意这个ID不能跟jstack中的nativeID一一对应
NAME: 线程名称
GROUP: 线程组名称
PRIORITY: 线程优先级, 1~10之间的数字,越大表示优先级越高
STATE: 线程的状态
CPU%: 线程消耗的cpu占比,采样间隔100ms,将所有线程在这100ms内的cpu使用量求和,再算出每个线程的cpu使用占比。
TIME: 线程运行总时间,格式为 分:秒
INTERRUPTED: 线程当前的中断状态
DAEMON: 是否是守护线程
监控页面会实时刷新,默认每5000毫秒(5秒)刷新一次。可以通过 - i 参数指定刷新频率,-n 参数指定刷新次数。这个统计会有一定的开销,从截图中也可以看到arthas的cpu占比较大,所以刷新频率不要太高,建议5秒以上,刷新次数建议10次以内。
#每10秒刷新一次,3次后停止
$ dashboard -i 10000 -n 3
注意!!!
根据Arthas的使用指导,首先运行dashboard
命令来检查系统状态,重点关注Memory部分的信息。这一步是为了排除内存使用满或GC频率过高导致的CPU升高。观察:
- 内存使用情况:是否接近满载?
- GC计数:频率是否异常高
2、Thread:
-
查看当前线程信息,查看线程的堆栈
参数说明
参数名称 参数说明 id 线程 id [n:] 指定最忙的前 N 个线程并打印堆栈 [b] 找出当前阻塞其他线程的线程 [i <value>
]指定 cpu 使用率统计的采样间隔,单位为毫秒,默认值为 200 展示当前项目占用cpu最多的前N个线程:
#打印当前项目中占用cpu最多的前3个线程 $ thread -n 3
假设:控制台输出如下信息
"C1 CompilerThread