Java进程导致CPU使用达到了100%,如何排查,定位,解决该问题?

背景

开发生产中,有时候我们会碰到告警,CPU过高,超过100%,这个时候我们应该怎么办?

解决方案

java进程导致CPU过高

定位耗费CPU的进程

top -c命令,显示进程列表。然后输入P(大写),按照CPU排序。

如果是Java进程引起的CPU偏高,然后分析为什么这个Java进程对应的线程。进而找到原因。

定位耗费CPU的线程

top -Hp 进程ID,输入P按照CPU排序。

定位哪段代码导致CPU过高

printf "%x\n" 线程ID 把线程pid转换为16进制。

然后用jstack命令打印进程的堆栈信息,通过grep那个线程的16进制pid,找到那个线程相关的东西。在打印的对战信息中,查找是哪个类的哪个方法导致的CPU 100%的问题。然后去解决问题。
jstack 进程ID | grep '0x16进制线程ID' -C5 --color

最后得知是代码中存在死循环导致的(测试使用,要是想让CPU跑的更满,可以启用自己CPU一致的线程数,分别死循环):

修改代码,解决问题。

注意:
在编写代码时候,注意循环条件推出方式


   转载规则


《Java进程导致CPU使用达到了100%,如何排查,定位,解决该问题?》 lendea 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
JVM基础概念 JVM基础概念
JVM基础概念什么是JVMJVM:Java virtual machine,Java虚拟机,它是一种规范。是虚构出来的一台计算机。它可以将二进制字节码根据不同的操作系统转为当前操作系统识别的的字节码指令(汇编语言),从而实现跨平台。并有很好
2020-11-13
下一篇 
面向对象的理解 面向对象的理解
面向对象的理解面向对象是一种编程风格,可以实现很多复杂的设计思路,是设计原则和设计模式编码实现的基础。 抽象抽象是一个很宽泛的名词,从大方面上讲,我们需要以面向对象的方式先抽象出业务对象,然后抽象出其属性和行为,最后进行封装。小的方面就是具
  目录