程序占用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;或者其它的问题 一般都是死循环导致