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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容