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

Java应用CPU占用过高故障排除

一、背景

最近测试反馈测试环境接口偶现有访问超时,然后APP提示是网络失败,看了一下测试环境的应用完全没啥问题,一直以为是网络问题。

今天测试有反馈了,赶紧看了一下测试服务器,这次终于有症状了,CPU直接飙到300%了。

尽然问题复现了,直接开干,定位问题

img

二、解决思路

1、定位问题应用进程

使用top命令,然后按照CPU排序,如下图所示,进程PID为13258的Java应用占用300%的CPU资源。

image-20230901100203416

Java应用造成CPU高的主要原因一般是线程一直处于可运行(Runnable)状态,通常这些线程在执行无阻塞操作、循环、正则或纯粹的计算等任务,
另一个可能造成CPU高的原因是频繁GC

所以现在进程的线程情况

2、查看进程中线程使用情况

使用命令 top -H -p 查看如下图:

#-H:所有线程占用资源情况。
#-p<进程号>:指定进程;
top -H -p 13258

image-20230901100131530

发现有三个线程实时CPU占用率较高,并且处理器使用时间非常长,25438线程实际占有处理器的时间甚至达到190分钟。

现在问题已经找到了,就是这三个线程持续占用CPU资源,下面我们再具体看一下这个线程再干嘛

3、查看线程的快照

通过jstack 命令查看线程14689的快照

jstack 13258 |grep "3961" -A 30

image-20230901100305203

jstack后面的参数是PID的值,3961是线程id 14689 的十六进制。

可以通过以下命令把线程id转成16进制

 printf "%x\n" 14689

通过观察输出,可以看到线程长期处于可运行状态,直接根据堆栈信息找到对应的代码。

4、最后

找到对应代码修改后基本就解决问题了

img

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

相关文章:

  • 嵌入式Linux开发实操(十五):nand flash接口开发(2)
  • 作为一家游戏开发公司,有哪些经验可以分享?
  • 【100天精通Python】Day51:Python 数据分析_数据分析入门基础与Anaconda 环境搭建
  • 网络安全(黑客)自学路线
  • HTML5
  • Vue+Element-ui实现表格本地导入
  • Golang参数输入
  • 2023年8月第4周大模型荟萃
  • Kafka监控工具,LinkedIn详解
  • 如何处理 Flink 作业频繁重启问题?
  • Windows 安装 RabbitMq
  • Mybatis的关系关联配置
  • 【知识积累】准确率,精确率,召回率,F1值
  • 什么是分布式系统?
  • [AGC043D] Merge Triplets
  • 2023年人工智能开源项目前20名
  • ThinkPHP 集成 jwt 技术 token 验证
  • gerrit 如何提交进行review
  • 罗勇军 →《算法竞赛·快冲300题》每日一题:“游泳” ← DFS+剪枝
  • 【教程】PyTorch Timer计时器
  • 因果推断(六)基于微软框架dowhy的因果推断
  • 探索隧道ip如何助力爬虫应用
  • 题目:2629.复合函数
  • 【实训项目】精点考研
  • 软件测试Pytest实现接口自动化应该如何在用例执行后打印日志到日志目录生成日志文件?
  • 深入理解作用域、作用域链和闭包
  • 7款适合3D建模和渲染的GPU推荐
  • 边缘计算物联网网关在机械加工行业的应用及作用分享
  • (笔记六)利用opencv进行图像滤波
  • WPF C# .NET7 基础学习