java程序CPU 100%调试

时间:2024-05-01 15:04:00

前置

PID为进程id,NID为线程ID

步骤一、找到最耗CPU的进程

  top 然后键入P,按CPU占用率排序(M是按内存排序)

java程序CPU 100%调试

步骤二、找到进程中最耗CPU的线程

  top -Hp PID

java程序CPU 100%调试

步骤三、将线程NID转换为16进程

  printf '%x\n' NID

java程序CPU 100%调试

步骤四、使用jstack查看堆栈

  jstack PID | grep 'NID' -C行数 --color

java程序CPU 100%调试

线程状态说明

线程状态:

NEW,未启动的。不会出现在Dump中。
RUNNABLE,在虚拟机内执行的。
BLOCKED,受阻塞并等待监视器锁。
WATING,无限期等待另一个线程执行特定操作。
TIMED_WATING,有时限的等待另一个线程的特定操作。
TERMINATED,已退出的。

dump 文件线程状态:

死锁,Deadlock(重点关注)
执行中,Runnable
等待资源,Waiting on condition(重点关注)
等待获取监视器,Waiting on monitor entry(重点关注)
暂停,Suspended
对象等待中,Object.wait() 或 TIMED_WAITING
阻塞,Blocked(重点关注)
停止,Parked