java程序CPU 100%调试

前置

PID为进程id,NID为线程ID

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

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

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

  top -Hp PID
image.png

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

  printf '%x\n' NID
image.png

步骤四、使用jstack查看堆栈

  jstack PID | grep 'NID' -C行数 --color
image.png

线程状态说明

线程状态:

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

你可能感兴趣的:(java程序CPU 100%调试)