-
先需要找出那个进程占用 CPU 高。
top 列出系统各个进程的资源占用情况。 -
然后根据找到对应进行里哪个线程占用 CPU 高。
top -Hp 进程 ID 列出对应进程里面的线程占用资源情况 -
找到对应线程 ID 后,再打印出对应线程的堆栈信息
printf "%x\n" PID 把线程 ID 转换为 16 进制。
jstack PID 打印出进程的所有线程信息,从打印出来的线程信息中找到上一步转换为 16 进制的线程 ID 对应的线程信息。 -
最后根据线程的堆栈信息定位到具体业务方法,从代码逻辑中找到问题所在。
查看是否有线程长时间的 watting 或 blocked,如果线程长期处于 watting 状态下, 关注 watting on xxxxxx,说明线程在等待这把锁,然后根据锁的地址找到持有锁的线程