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

 更新时间:2023年06月26日 11:26:59   作者:java路飞  
在Java并发编程计算密集型要进行大量的计算、逻辑判断等操作,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,下面这篇文章主要给大家介绍了关于java应用cpu飙升(超过100%)故障排查步骤的相关资料,需要的朋友可以参考下

前言

害。。。

昨天刚写完一份关于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飙升原因

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

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

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

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

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

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

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

总结

到此这篇关于java应用cpu飙升(超过100%)故障排查步骤的文章就介绍到这了,更多相关java应用cpu飙升故障内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Bean注册与注入实现方法详解

    Spring Bean注册与注入实现方法详解

    首先,要学习Spring中的Bean的注入方式,就要先了解什么是依赖注入。依赖注入是指:让调用类对某一接口的实现类的实现类的依赖关系由第三方注入,以此来消除调用类对某一接口实现类的依赖。Spring容器中支持的依赖注入方式主要有属性注入、构造函数注入、工厂方法注入
    2022-10-10
  • 剖析SpringCloud Feign中所隐藏的坑

    剖析SpringCloud Feign中所隐藏的坑

    这篇文章主要为大家介绍了剖析SpringCloud Feign中所隐藏的坑示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 深入理解Java设计模式之备忘录模式

    深入理解Java设计模式之备忘录模式

    这篇文章主要介绍了JAVA设计模式之备忘录模式的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解
    2021-11-11
  • Java web入门指南之在Idea上创建Java web项目

    Java web入门指南之在Idea上创建Java web项目

    好多书上的JavaWeb教程都是Eclipse以及MyEclipse,当然这里不论IDE的好坏,下面这篇文章主要给大家介绍了关于Java web入门指南之在Idea上创建Java web项目的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • 一文详解Java中主流的代码审计与漏洞检测工具使用

    一文详解Java中主流的代码审计与漏洞检测工具使用

    在软件开发中,代码审计和漏洞检测是至关重要的步骤,本文将详细介绍几种主流的Java代码审计与漏洞检测工具,包括SonarQube、FindBugs、Checkmarx和SpotBugs,及其使用方法,感兴趣的小伙伴可以了解下
    2026-04-04
  • Springboot获取bean实例之SpringContextUtil详解

    Springboot获取bean实例之SpringContextUtil详解

    这篇文章主要介绍了Springboot获取bean实例之SpringContextUtil使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • Java正则替换手机号代码实例

    Java正则替换手机号代码实例

    本文的主要内容是Java语言中正则表达式替换手机号的第4到第7位,实现方法十分简单,同时涉及了一些正则表达式的相关用法,需要的朋友可以参考下。
    2017-09-09
  • javaweb servlet生成简单验证码

    javaweb servlet生成简单验证码

    这篇文章主要为大家详细介绍了javaweb servlet生成简单验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Spring 中优雅的获取泛型信息的方法

    Spring 中优雅的获取泛型信息的方法

    这篇文章主要介绍了Spring 中优雅的获取泛型信息的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 详解SpringBoot2.0的@Cacheable(Redis)缓存失效时间解决方案

    详解SpringBoot2.0的@Cacheable(Redis)缓存失效时间解决方案

    这篇文章主要介绍了详解SpringBoot2.0的@Cacheable(Redis)缓存失效时间解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04

最新评论