JVM定位程序假死或cpu占用高的线程
linux系统:
参考:https://blog.csdn.net/qq_40197576/article/details/80287515
1>使用top命令查看占用cpu进程情况,得到java进程pid
2>使用jps命令简单的列出java进程pid与类名
3>根据java进程pid,使用pidstat定位是那些线程的原因
pidstat -p 进程id 采样间隔时间与次数 -u(-u是监控cpu) -t (-t显示线程)
看占用cpu最高的线程id
4> 使用jstack命令输出线程信息
jstack java进程pid
5>将第<3>步得到的线程id转换为16进制,与第<4>步中的线程id对比,定位到问题线程和问题类
window系统:
方法一:可以在java/jdk/bin目录中找到jconsole(java监视管理控制台),在里面查看内存,线程,类,从而找到问题
方法二:参考:https://blog.csdn.net/qq_29664253/article/details/81111717
1>通过任务管理器,找到java进程pid
2>然后把java进程导出快照,直接运行命令 jstack -l pid >c:a.txt
3>在windows下只能查看进程的cpu占用率,要查看线程的cpu占用率要借助其他的工具,我这里用的是微软提供的 Process Explorer
4>找到java进程pid-->properties-->threads-->找到占用cpu最高的线程id
5>将第四步的线程id转换为16进制,与a.txt文件中的线程id对比,找到问题线程和问题类