使用Arthas工具分析CPU使用率高的问题原创
金蝶云社区-张悦_4969
张悦_4969
5人赞赏了该文章 1,562次浏览 未经作者许可,禁止转载编辑于2022年04月19日 15:07:32

当遇到 Java 性能问题时,如 Java CPU 飙升(使用率100%到200%)、负载突升等问题,大多数常见问题你都可以使用 Arthas 轻松定位。


使用方法: 

将arthas附件包解压后放到容器/mservice/logs目录下

步骤1.  执行 /jdk/bin/java -jar arthas-boot.jar  1     (容器里的java进程号PID默认为1)

步骤2.  执行thread命令查看CPU排序,定位哪个线程耗CPU

步骤3.  执行thread <线程号>  ,下图中执行thread 12,从12号线程堆栈里面获取是什么堆栈导致的CPU高。还可以根据堆栈里的traceid在苍穹monitor里查找具体是什么功能消耗的CPU资源,然后进一步分析问题原因。

image.png


目前最新mservice苍穹镜像已附带了arthas工具,在/opt目录下,执行as.sh脚本即可运行)如下


image.png


=====================================================================

注:有时应用服务会卡死,重启后会重现问题,完全卡死时无法收集。


如果苍穹进程不能挂载Arthas,或者处于CPU严重超载时,我们建议通过如下shell命令在容器里获取最耗时的线程:

# top -b -d2 -n3 -H -p 1 | grep 'top -' -A 17 > slow.log && /jdk/bin/jstack -l 1 >> slow.log

间隔2秒,获取3次进程1的前10个最耗费CPU的线程信息,并与线程堆栈一起输出到文件slow.log中,然后通过线程号找到最耗费CPU的线程。


----------------------------------------------------------------------------------------------------------------------


知识扩展:https://blog.csdn.net/u013735734/article/details/102930307


Arthas 只是一个 java 程序,所以可以直接用 java -jar 运行。运行时或者运行之后要选择要监测的 Java 进程。

(1)运行方式1,先运行,在选择 Java 进程 PID

 /jdk/bin/java -jar arthas-boot.jar

 # 选择进程(输入[ ]内编号(不是PID) 回车) 

[INFO] arthas-boot version: 3.1.4 

[INFO] Found existing java process, please choose one and hit RETURN. 

[1]: 11616 com.Arthas  

[2]: 8676  

[3]: 16200 org.jetbrains.jps.cmdline.Launcher  

[4]: 21032 org.jetbrains.idea.maven.server.RemoteMavenServer 


(2)运行方式2,运行时选择 Java 进程 PID 

/jdk/bin/java -jar arthas-boot.jar [PID]


arthas.zip(11.39MB)

赞 5