线上JAVA项目CPU飙升如何排查?

1.首先通过top命令查看,使用率非常高而且在不断地增长,得出java进程pid是1494

2.根据上一步得出的PID查看有哪些线程

[zhupengfei@devops-rocky84-shanghai-area1 ~]$ top -Hp 1494 # 得出线程PID号为426440

3.将PID转换成十六进制

[zhupengfei@devops-rocky84-shanghai-area1 ~]$ printf '%x' 426440
681c8[zhupengfei@devops-rocky84-shanghai-area1 ~]$ 
[zhupengfei@devops-rocky84-shanghai-area1 ~]$ jstack 1494 > /var/log/project/user-defined/jstack1494.log # 生成到一个日志文件里面去
[zhupengfei@devops-rocky84-shanghai-area1 ~]$ vim /var/log/project/user-defined/jstack1494.log # 搜索刚才转换好的十六进制681c8,找到线程代码,再往下找到业务代码

...
at com.ponfey.controller.JVMController.loop(JVMController.java:19) # 可以看到这个位置导致CPU运行占用过高,可以到源代码第19行位置进一步排查
...

遇到一次进程的线程每一个都占用很高呢?

首先ps出进程号,拿进程号top -H出进程中占用高的线程,线程转16线程,jstack出线程堆栈,能看个大概,再导出快照,mat分析具体。

上一篇
下一篇