CPU飚高问题排查基本步骤

CPU 飚高
一般是死循环或者死锁问题导致。

1. 通过 top  命令找到 CPU 消耗最高的进程,并记住进程 ID {pid}。
top -M -n 2 -d 3 >{pid}/top.txt 查看top

2. 再次通过 top -Hp  {pid} 找到 CPU 消耗最高的线程 ID,并记住线程 ID(十进制).


3.通过 JDK 提供的 jstack 工具 dump 线程堆栈信息到指定文件中。
jstack {pid} >{pid}/jstack_1.txt 一次堆栈快照 备用

jstack {pid} >{pid}/jstack_2.txt 两次堆栈快照 备用

由于刚刚的线程 ID 是十进制的,而堆栈信息中的线程 ID 是16进制的,因此我们需要将10进制的转换成16进制的,并用这个线程 ID 在堆栈中查找。
使用 printf "%x\n" [十进制数字] ,可以将10进制转换成16进制。
通过刚刚转换的16进制数字从堆栈信息里找到对应的线程堆栈。就可以从该堆栈中看出端倪。

posted @ 2018-12-16 20:33  老王子H  阅读(1000)  评论(0编辑  收藏  举报