jvm cpu100%排查方法

时间:2025-08-07

下面给出两种系统下的排查步骤,都是一模一样的,只是命令稍有区别!


查消耗cpu最高的进程PID


根据PID查出消耗cpu最高的线程号


根据线程号查出对应的java线程,进行处理。


准备一行死循环代码:


                        


Windows 服务器

查消耗cpu最高的进程PID


手边没有windows server机器,我以win 10为例,截图给大家看一下,先调出PID显示项!





然后发现进程PID如下图所示,为10856





接下来呢?


根据PID查出消耗cpu最高的线程号


这里用到微软的工具Process Explorer v16.22,地址如下

https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-explorer

如图所示





发现最耗cpu的线程的TId为6616

这是十进制的数据,转成十六进制为19d8


根据线程号查出对应的java线程,进行处理


执行命令,导出进程快照




打开文件 c:/10856.stack,搜索19d8,如下图所示





根据文件就可以看出,我们的TestFor.java文件第七行一直在跑,至此定位到问题


Linux:

查消耗cpu最高的进程PID


执行命令


执行top -c ,显示进程运行信息列表。按下P,进程按照cpu使用率排序


如下图所示,PID为3033的进程耗费cpu最高




根据PID查出消耗cpu最高的线程号


执行命令


top -Hp 3033 ,显示一个进程的线程运行信息列表。按下P,进程按照cpu使用率排序


如下图所示,PID为3034的线程耗费cpu最高




这是十进制的数据,转成十六进制为0xbda


根据线程号查出对应的java线程,进行处理


执行命令,导出进程快照


jstack -l 3033 > ./3033.stack

AI写代码

然后执行,grep命令,看线程0xbda做了什么


cat 3033.stack |grep 'bda' -C 8

AI写代码

输出如下



免责声明:服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
IPv4 © 2005-2025 库目书 版权所有 | kumushu.com .All Rights Reserved
黑ICP备2022003236号-1