Linux环境Java程序占用 CPU 过高如何排查

Posted 若甘年后

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux环境Java程序占用 CPU 过高如何排查相关的知识,希望对你有一定的参考价值。

第一步,使用 top 找到占用 CPU 最高的 Java 进程

使用 top命令发现占用 CPU 99.7% 的线程是 Java 进程,进程 PID 为 13731。

第二步,用 top -Hp 命令查看占用 CPU 最高的线程
上一步用 top命令找到了那个 Java 进程。那一个进程中有那么多线程,不可能所有线程都一直占着 CPU 不放,这一步要做的就是揪出这个罪魁祸首,当然有可能不止一个。

执行top -Hp pid命令,pid 就是前面的 Java 进程,我这个例子中就是 13731 ,完整命令为:

top -Hp 13731,执行之后的效果如下:

可以看到占用 CPU 最高的那个线程 PID 为 13756。

然后将 13756转换为 16 进制的,后面会用到,可以用在线进制转换的网站直接转换,转换结果为 0x35bc

第三步,保存线程栈信息

当前 Java 程序的所有线程信息都可以通过 jstack命令查看,我们用jstack命令将第一步找到的 Java 进程的线程栈保存下来。命令如下:

jstack 13731 > thread_stack.log

第四步,在线程栈中查找最贵祸首的线程

第二步已经找到了这个罪魁祸首的线程 PID,并把它转换成了 16 进制的,第三步保存下来的线程栈中有所有线程的 PID 16 进制信息,我们在线程栈中查找这个16进制的线程 id (0x35bc)。

参考:【Java面试】阿里场景面试题,CPU飙高系统反应慢怎么排查?_哔哩哔哩_bilibili

以上是关于Linux环境Java程序占用 CPU 过高如何排查的主要内容,如果未能解决你的问题,请参考以下文章

linux java cpu占用过高怎么办

Linux排查java程序占用cpu过高的线程代码

排查linux下java应用cpu占用过高

linux查看java进程cpu占用过高

Java内存CPU占用率过高

[转]生产环境中程序占用cpu过高的程序的排查办法