程序占用cpu过高,除了确定是计算密集型应用以外 ,一般都是代码出现了死循环
1. 先使用top -c 查询是哪个进程出现了问题

%cpu 已经超过100 临近崩溃点 查看左边PID 进程id =25914
2. 使用 top -Hp 进程PID 命令 进入超载进程查看具体的线程

先查看占用cpu最高的线程id 暂时备注为 TID (进程备注PID 线程为TID 用于方便理解)
最高的 线程id为 25973
3. 使用
jstack PID| grep TID(转换成十六进制) -A30
命令进入详情查看 但是jstack 命令可能会出现一些错误 稍后我会继续贴图 没出现任何问题的情况下 先转换TID(线程id)为十六进制 命令为: printf “%x\n” TID

printf “%x\n” TID 或者 echo 'obase=16;25973' | bc 都是可以的
此时此刻 我的十六进制为6575 (踩过这个坑 所以会详细跟你们贴图) 有些时候它会返回一个数字
我是手动在前面添加 0x

此时此刻我得这边还在返回not found
如果有跟我一样的伙伴 请详细看下图

命令: ./jstack PID | grep TID(转换十六进制) -A30

这边就是报错的详细位置了 一般都是while循环 仔细查看代码有没有break;或者其它的问题 一般都是死循环导致
本文介绍了一种排查程序CPU占用过高的方法,包括使用top命令定位问题进程,通过jstack命令进一步分析具体线程的死循环原因。
1677

被折叠的 条评论
为什么被折叠?



