三个步骤:
1. 找到最耗CPU的进程
工具: top 方法:
- 执行 top -c ,显示进程运行信息列表
- 键入 P (大写 p),进程按照 CPU 使用率排序
2. 找到最耗CPU的线程
工具: top 方法:
- top -Hp 10765 ,显示一个进程的线程运行信息列表
- 键入 P (大写 p),线程按照 CPU 使用率排序
3. 查看堆栈,定位线程在干嘛,定位对应代码
- 首先,将线程 PID 转化为 16 进制。
工具:printf
方法:printf “%x\n” 10804
之所以要转化为 16 进制,是因为堆栈里,线程 id 是用 16 进制表示的。 - 接着,查看堆栈,找到线程在干嘛。
工具:jstack
方法:jstack 10765 | grep ‘0x2a34’ -C5 --color
打印进程堆栈 通过线程 id,过滤得到线程堆栈
例如(1)
此线程运行当前状态,无具体运行代码
例如(2)
此线程运行当前状态,有具体运行代码(猜测可能为死循环),根据线程堆栈中指示的业务代码进一步分析