您现在的位置是:首页 > 正文

java 应用cpu飙升(超过100%)故障排查

2023-10-18 21:29:15阅读 3681

前言

害。。。

昨天刚写完一份关于jvm问题排查相关的博客,今天线上项目就遇到了一个突发问题。

现象是用户反映系统非常卡,无法操作。

然后登录服务器查看发现cpu 一直100%以上。


具体排查步骤:

1,首先top命令查看服务器cpu等情况:

发现线上pid 29737的 java应用cpu达到100%

2,top -H -p pid命令查看具体的线程情况

top -H -p 29373

输入上述命令,然后按H显示cpu最高排名的线程。可以看到pid 30013的线程cpu 100%且一直未释放。

3.将线程的pid转为16进制

printf "%x\n" 30013

30013做16进制转换为753d

4.使用jvm工具jstack打印该进程的堆栈信息

使用该命令打印堆栈信息的后50行

jstack 29737 |grep -A 50 753d 

然后就可以具体看到具体的出问题的是哪部分代码了,然后检查更改即可。(我们的是代码中出现死循环)

注意问题:

可能会出现以下报错

xxxx: Unable to open socket file: target process not responding or HotSpot VM not loaded

The -F option can be used when the target process is not responding

有两个可能:

  1. jstack后面的进程pid不对,或者16进制的数不对。

需要注意jstack后面是jps的java进程id。

2.执行该命令的用户必须和java应用所属的用户一致。

常见的cpu飙升原因

  1. 程序中存在死循环或者长时间占用 CPU 的操作。比如,不合理的递归操作、循环操作等等。

  1. 程序中存在大量的计算操作,例如复杂的算法、大量的数值计算等等。

  1. 程序中存在大量的 IO 操作,例如读写文件、网络通信等等。

  1. 程序中存在大量的线程创建和销毁操作,以及线程间的竞争和同步操作。

  1. 程序中存在内存泄漏或者内存溢出,导致 JVM 不断进行垃圾回收。

  1. 程序中存在大量的数据库操作,导致数据库连接池的耗尽和数据库负载过高。

针对这些问题,需要具体情况具体分析,采取相应的优化措施,例如修改代码逻辑、优化算法、降低 IO 操作频率、减少线程创建和销毁、增加 JVM 内存等等。

网站文章

  • java Stream去重操作

    java Stream去重操作

    网上找的stream流去重方法,可以根据类的某个属性去重,这里记录一下。

    2023-10-18 21:29:04
  • Java-异或运算详解

    Java-异或运算详解

    异或运算会应用在很多算法题中,这里整理了几个最常见的应用场景

    2023-10-18 21:28:49
  • 头歌实训——Java面向对象--类与对象

    /创建Dog对象//设置Dog对象的属性d.name="五花肉";d.color="棕色";d.variety="阿拉斯加";//输出小狗的属性System.out.println("名字:" + d.name + ",毛色:" + d.color + ",品种:" + d.variety );//调用方法d.eat();d.run();}}//在这里定义Dog类{System.out.print

    2023-10-18 21:28:39
  • 完美解决AttributeError: ‘NoneType‘ object has no attribute ‘split‘ 报错处理

    完美解决AttributeError: ‘NoneType‘ object has no attribute ‘split‘ 报错处理

    这个错误通常出现在使用 NoneType 对象调用 split() 方法时。NoneType 是 Python 中表示空值的类型。

    2023-10-18 21:27:57
  • JavaWeb:实现购物商城(课程设计完整版)

    JavaWeb:实现购物商城(课程设计完整版)

    基于javaweb实现的网上购物商城,实现了一些基础功能,供大家参考学习,也可以当做课程设计,在文章结尾附有源代码和素材让大家使用。原创作品,大家可以在评论区指出问题哟,我们共同学习!

    2023-10-18 21:27:40
  • 数据结构:栈和队列(详细讲解)

    数据结构:栈和队列(详细讲解)

    详细的讲解了栈和队列,内容理解轻松适合初学者学习

    2023-10-18 21:27:16
  • 如何在Java中输入

    如何在Java中输入

    Java中Scanner输入

    2023-10-18 21:26:52
  • Java迭代器详解,看这一篇就够了

    Java迭代器详解,看这一篇就够了

    Java迭代器详解,看这一篇就够了!

    2023-10-18 21:26:25
  • 【架构师】零基础到精通——网关详解

    【架构师】零基础到精通——网关详解

    跟博主一起学习技术相关的 幂等、限流、降级、断路器、事务、缓存、分库分表 等总结!

    2023-10-18 21:26:13
  • 一文了解编程领域的模版

    一文了解编程领域的模版

    🍊在编程领域,模板是一种代码片段,它可以被重复使用,并允许您在保持代码的基本结构不变的情况下,根据需要调整其中的内容。模板通常在构建大型程序或开发一类相关程序时非常有用,以减少代码冗余并提高代码可读性。🍊模板可以通过多种方式实现,具体取决于使用的编程语言。在 C++ 中,可以使用模板来实现泛型编程。在 Java 中,可以使用泛型来实现类似模板的功能。此外,许多编程语言都提供了模板引擎,可以生成

    2023-10-18 21:25:58