当前位置: 首页 > news >正文

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

前言

害。。。

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

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

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


具体排查步骤:

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

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

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

top -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 内存等等。

http://www.lryc.cn/news/25555.html

相关文章:

  • 光学设计软件Ansys的Lumerical 2023版本下载与安装使用
  • Java 异常
  • JavaSE学习笔记day17
  • 【项目】Vue3+TS 动态路由 面包屑 查询重置 列表
  • 前脚背完这些接口自动化测试面试题,后脚就进了字节测试岗
  • termux 安装centos
  • 从菜鸟程序员到高级架构师,竟然是因为这个字final
  • 【vulhub漏洞复现】CVE-2018-2894 Weblogic任意文件上传漏洞
  • 函数栈帧详解
  • Spring 事务(编程式事务、声明式事务@Transactional、事务隔离级别、事务传播机制)
  • 车载技术——Window Display之surface的绘制过程与原理
  • 2023年全国最新工会考试精选真题及答案10
  • pytorch-复现经典深度学习模型-LeNet5
  • 【C++】类和对象(上)
  • 工作中责任链模式用法及其使用场景?
  • 三八女神节有哪些数码好物?2023年三八女神节数码好物清单
  • FairGuard-Windows加固工具版本更新日志
  • 基于RT-Thread完整版搭建的极简Bootloader
  • 3.flinkDateStreamAPI介绍env与source
  • $ 2 :数据类型
  • 类和对象 - 上
  • 补档:红黑树代码实现+简略讲解
  • FirePower X2 14.0.1 for RAD Studio Alexandria
  • 二十九、MongoDB 恢复数据( mongorestore )
  • 【数据分析】缺失数据如何处理?pandas
  • 嵌入式开发--STM32H750VBT6开发中,新版本CubeMX的时钟问题,不能设置到最高速度480MHZ
  • 一文读懂PaddleSpeech中英混合语音识别技术
  • 问题三十四:傅立叶变换——高通滤波
  • flink 键控状态(keyed state)
  • 【ChatGPT】sqlachmey 多表连表查询语句