一、top命令查看整体状态
PS:然后按大写P,CPU使用率会降序排序
有几个注意点
1、load average的三个数值,只有都大于5,基本就有问题
2、排查使用最高的几个java进程
二、以PID为25412的java进程为例
2.1 查询进程中,那个线程的cpu占用率高,标记TID
# ps -mp 25412 -o THREAD,tid,time
USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME
root 164 - - - - - - 9-08:17:08
........
........
root 0.0 19 - futex_ - - 25686 00:00:02
root 98.2 19 - - - - 25687 5-13:37:11
........
........
可以看出来,占用CPU最高子线程的TID为:25687
三、打印25412进程下25687线程的日志
jstack 25412 >>25412cpu.log
换算TID:25687为16进制,结果为: 6457
在线工具:https://tool.lu/hexconvert/
四、在日志中定位到6457
vim 25412cpu.log
定位到如下图所示:
五、因为不会java,代码问题只能让谁写的谁自己排查了
但是可能会有死循环,或者休眠不结束进程等原因
六、如果是docker容器的话,步骤为:
6.1 找到容器的ID
6.2 进入到容器内部
docker exec -it 容器ID /bin/bash
6.3 打印日志
jstack PID >PID.log
6.4 换算线程然后排查
参考:https://blog.csdn.net/weixin_43778179/article/details/90147523