问题描述
线上服务器,cpu占用高,需要对该问题进行定位解决。
1.寻找cpu占用高的程序
1.1 执行top -c ,显示进程运行信息列表
1.2 键入P (大写p),进程按照CPU使用率排序
image.png
从上面的图片可以看到,cpu占用高的进程为3675,需要对该进程进行追查。
2. 查找cpu消耗高的线程
2.1 top -Hp 3675,显示一个进程的线程运行信息列表
2.2 键入P (大写p),线程按照CPU使用率排序
image.png
从上图可以看出,cpu使用率高的进程id为3676。
3. 线程号转换为16进制
在shell中,使用如下指令
printf “%x” 3676
将cpu使用高的线程3676转换为16进制为e5c,该转换也可以使用计算器完成。
4.使用jstack查找cpu占用高的线程
jstack 3675|grep '0xe5c' -C5 --color
image.png
由图片可以看出,main线程中有代码cpu占用高,接下来去查main线程代码即可。
网友评论