JAVA进程CPU使用率使用过高故障排查

发现问题

服务器cpu使用率非常高

故障定位

根据这种故障的一般处理思路,先找出问题进程内CPU占用率高的线程,再通过线程栈信息找出该线程当时在运行的问题代码段,操作如下:

根据思路查看高占用的“进程中”占用高的“线程”,追踪发现7163的进程中16298的线程占用较高,使用命令:
1
top -Hbp 12241 | awk '$9>50'
显示结果:

将16298的线程ID转换为16进制的线程ID。
1
2
printf "%x\n" 12384
3060

通过jvm的jstack查看进程信息,发现是调用数据库的问题。
1
jstack 12241 | grep "3060" -A 30
显示结果:

经查询为定时任务,需要大量cpu资源进行运算