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

[已解决]服务器CPU突然飙高98%----Java程序OOM问题 (2024.9.5)

目录

  • 问题描述
  • 问题排查
  • 问题解决
  • 参考资料


问题描述

业主单位服务器自8月29日晚上21:00起CPU突然飙高至98%,内存爆满,一直到9月5日:

在这里插入图片描述


问题排查

①执行 top 命令查看Java进程PID

top

在这里插入图片描述

②执行top -Hp PID 命令查看具体的线程情况

top -Hp 3058

输入上述命令会显示进程 ID 为 3058 的进程及其所有子进程的资源使用情况,按占用cpu使用率倒序显示

在这里插入图片描述
上述占用CPU最高的前十线程如下:

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                                                           
 47496 root      20   0   18.6g  10.7g  15376 R  61.9  68.6 406:54.77 Thread-240                                                                                                                                        
 10017 root      20   0   18.6g  10.7g  15376 R  49.3  68.6 293:56.47 Thread-246                                                                                                                                        
 10391 root      20   0   18.6g  10.7g  15376 R  48.0  68.6 293:37.96 Thread-249                                                                                                                                        
 10141 root      20   0   18.6g  10.7g  15376 R  46.0  68.6 293:45.48 Thread-247                                                                                                                                        
 10259 root      20   0   18.6g  10.7g  15376 R  44.7  68.6 293:57.29 Thread-248                                                                                                                                        
  9965 root      20   0   18.6g  10.7g  15376 R  42.1  68.6 294:10.26 Thread-245                                                                                                                                        
  3060 root      20   0   18.6g  10.7g  15376 S  16.2  68.6 103:36.83 GC task thread#                                                                                                                                   
  3061 root      20   0   18.6g  10.7g  15376 S  15.9  68.6 103:36.20 GC task thread#                                                                                                                                   
  3063 root      20   0   18.6g  10.7g  15376 S  15.9  68.6 103:33.17 GC task thread#                                                                                                                                   
  3062 root      20   0   18.6g  10.7g  15376 S  15.6  68.6 103:38.85 GC task thread#                                                                                                                                   
  3064 root      20   0   18.6g  10.7g  15376 S   4.3  68.6  32:01.71 VM Thread  

③将线程的pid转为16进制

printf '0x%x\n' PID

在这里插入图片描述
在这里插入图片描述

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

jstack 47496 | grep -A 50 0xb988

But 报错了

在这里插入图片描述

47496: Unable to open socket file /proc/47496/root/tmp/.java_pid47496: target process 47496 doesn't respond within 10500ms or HotSpot VM not loaded

查阅相关资料

在这里插入图片描述

注意:发现本地执行命令的用户和Java应用所属的用户均一致,jstack后面的pid与16进制的数也是一致的,因为是直接复制过去的,若无法解决,可直接执行第⑤步

⑤执行jstack命令抓取Java线程的堆栈信息

 jstack 3058 > /opt/xxxxx/thread_dump.txt 

上述命令会将进程 ID 为 3058 的 Java 应用程序生成一个线程堆栈转储(thread dump),并将输出重定向到 /opt/xxxxx/thread_dump.txt 文件中

在这里插入图片描述

⑥抓取thread_dump.txt文件至本地分析,以子线程Thread-240分析【0xb988】

在这里插入图片描述

⑦使用反编译工具JD-GUI查看对应class文件

在这里插入图片描述
官方下载链接:http://java-decompiler.github.io/

在这里插入图片描述

成功定位到问题,进行相关代码修改后打包部署!!!


问题解决

近3日服务器运行状况如下:

在这里插入图片描述
可以看到CPU使用率基本稳定在10%,解决Java程序OOM 成功!!!


参考资料

  • java应用cpu飙升(超过100%)故障排查步骤
  • 重点问题!CPU利用率过高排查思路|原创

文章转载自:

http://s02citBx.rzscb.cn
http://P54Cxhhg.rzscb.cn
http://zVTrKFTj.rzscb.cn
http://0rcMgpzL.rzscb.cn
http://YdC1ZeyK.rzscb.cn
http://p16RKkHK.rzscb.cn
http://7mdCjoqV.rzscb.cn
http://VCr3ShKy.rzscb.cn
http://gjE7N7UA.rzscb.cn
http://gxcGO4TZ.rzscb.cn
http://R4o5toYX.rzscb.cn
http://MntRi4bm.rzscb.cn
http://ThkFRv82.rzscb.cn
http://1Sepq9TW.rzscb.cn
http://88YkssHb.rzscb.cn
http://WWq8IDET.rzscb.cn
http://7UiMLraJ.rzscb.cn
http://l9rvJI55.rzscb.cn
http://GTgKVOdp.rzscb.cn
http://VCoGM8Yz.rzscb.cn
http://rPtyTrOW.rzscb.cn
http://27IDNOiH.rzscb.cn
http://edXxfXFo.rzscb.cn
http://tmOXx9Gc.rzscb.cn
http://r0H1bEKe.rzscb.cn
http://NL9SH7Me.rzscb.cn
http://0acRomHo.rzscb.cn
http://mvYvgIBt.rzscb.cn
http://x6FO6rdl.rzscb.cn
http://H0RsF5wr.rzscb.cn
http://www.dtcms.com/a/89748.html

相关文章:

  • C++高阶
  • 哈希--哈希桶
  • wordpress主题开发框架(灵狐框架),开发文档使用教程
  • Docker 搭建 PlantUML 服务:高效生成 UML 图的最佳实践
  • 算法-动态规划二
  • Day38 | 1365. 有多少小于当前数字的数字、941. 有效的山脉数组、1207. 独一无二的出现次数、283. 移动零、189. 轮转数组
  • shell脚本一键安装docker+docker-compose,支持x86_64、arm64双架构
  • 桑福德·韦尔策划美国捷运公司收购南美银行案例分析
  • 数组子序列比较的SIMD优化
  • 字典树与01trie
  • 数值分析作业插值法2
  • CD18.【C++ Dev】类和对象(9)(声明和定义分离的写法以及代码复用)
  • php webshell免杀
  • Hive问题记录(1)
  • SingleMod
  • inline 配置全局参数变量
  • 深入解析 Spring Framework 5.1.8.RELEASE 的源码目录结构
  • 驱动编写-DS18B20温度传感器
  • 远场分量(平面波角谱)与倏逝波
  • 搜索旋转排序数组
  • 初见MyBatis
  • 区间端点(java)(贪心问题————区间问题)
  • 游戏中的碰撞检测算法
  • 吐血整理:Air8201如何使用LuatOS进行电源管理功能!
  • 线程控制与线程库
  • ideaIU-2023.2.5.exe install (IntelliJ_IDEA_IU_2023.2.5)
  • 解决海豚调度器跑出数据但显示状态失败(在CDH6.3.2跑离线数仓任务)
  • C#中获取字节数据的高字节和低字节
  • MyBatis-Plus LambdaQueryWrapper 详解:优雅构建类型安全的查询条件
  • 3.25学习总结 抽象类和抽象方法+接口+内部类+API