前置
PID为进程id,NID为线程ID
步骤一、找到最耗CPU的进程
top 然后键入P,按CPU占用率排序(M是按内存排序)

步骤二、找到进程中最耗CPU的线程
top -Hp PID

步骤三、将线程NID转换为16进程
printf '%x\n' NID

步骤四、使用jstack查看堆栈
jstack PID | grep 'NID' -C行数 --color

线程状态说明
线程状态:
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
网友评论