Java项目服务器CPU飙升问题排查

news2024/9/22 21:27:57

 目录

一.前言

二.程序日志定位

三.Mysql事务定位

四.程序代码定位

五.微服务注册异常定位

六.异常进程定位

6.1.进程的线程信息分析

6.2.进程的堆内存分析

七.总结

八.JVM分析工具推荐


一.前言

系统出现反应慢,打不开,登录不上等问题。

二.程序日志定位

通过程序日志定位,数据库连接池出现连接超时异常,排查对象转到mysql数据库。

三.Mysql事务定位

通过对mysql事务,锁的监控,发现大量事务挤压,随即排查程序代码中对事务的控制是否不合理。

四.程序代码定位

经过全局搜索代码中对事务提交和回滚的控制,没有疏漏点,并对个别逻辑进行缩小事务控制范围的的代码优化,对一些查询量较大和频繁的表增加索引,计划择时重启服务。

程序重启后,事务并没有消失,依然有挤压,随即对程序代码进行版本回退,排除近期新上线代码可能造成的影响。

五.微服务注册异常定位

在版本回退过程中,发现注册到nacos上的四个order服务,逐步”死掉”,直至order服务不可用。

并在order所在的服务器上发现,在order服务启动后,order服务CPU占用率逐步升高,程序日志无异常,进程存活。

通过分析,推断可能服务因为CPU资源占用问题向注册中心nacos心跳请求失败,注册中心把服务下线,排除掉代码中可能存在的死循环,线程阻塞的大方向后,随即对异常进程进行分析。

六.异常进程定位

6.1.进程的线程信息分析

  • top命令列出当前服务器所有进程,并按cpu占用大小排序
  • 根据第一步获取的进程号,查询进程里线程最占用cpu,使用命令:top -p 4001893 -H
  • 把线程堆栈信息dump到本地存储,使用命令:jstack  4001893 > /home/app_oper/jstack.log
  • 使用IBM的Thread and Monitor Dump Analyzer For Java 工具对线程堆栈信息分析,下载地址

在thread dump中,要留意下面几种状态 

死锁,Deadlock(重点关注) 
等待资源,Waiting on condition(重点关注) 
•  等待获取监视器,Waiting on monitor entry(重点关注) 
阻塞,Blocked(重点关注) 
•  执行中,Runnable 
•  暂停,Suspended 
•  对象等待中,Object.wait() 或 TIMED_WAITING 
•  停止,Parked 
下面有详细的例子讲这种分析,大家参考原著 
http://www.cnblogs.com/zhengyun_ustc/archive/2013/01/06/dumpanalysis.html 

6.2.进程的堆内存分析

可能存在内存泄漏,GC频繁执行的情况

  • 执行jmap -dump:format=b,file=/home/app_oper/heap.bin 4001893
  • 使用IBM的HeapAnalyzer工具对生成的heap.bin进行

 通过分析,发现对机构日报表的插入脚本过大。

定位到代码中,发现存在批量插入,数据量过大且组装成了单独的sql插入语句,并处在定时任务中,执行频率为5分钟。

对定时任务临时处理后重新部署上线,观察上述三种异常(事务,nacos,CPU)均未再出现。

七.总结

近期商城订单数量激增,定时任务在处理大数据量时出现性能问题,后续将对此类场景下可能存在的问题进行全面优化,排查线上问题,多使用相关工具,比如Java 命令行工具,可视化软件(HeapAnalyzer等),第三方插件(arthas,spring boot admin等),并做好日常系统巡检工作。

其他:

内存占用程序排序前10
ps aux --sort=-%mem | awk 'NR<=11{print $4,$11,$12,$13,$14,$15}'
磁盘占用文件排序前10
find . -type f -exec du -Sh {} + | sort -rh | head -n 11

八.JVM分析工具推荐

在Java开发和维护中,分析JVM性能和排查问题是非常重要的。以下是一些常用的Java虚拟机(JVM)分析工具:

1.VisualVM
        功能:VisualVM是一个多合一的JVM监控和故障排查工具。它可以用于监控JVM的性能,分析堆转储(Heap Dump)、线程转储(Thread Dump),以及执行实时的性能分析(Profiling)。
        优点:界面友好,支持插件扩展。
        适用场景:适用于调试和分析中小型Java应用程序的性能。

jdk有自带的jvisualvm

2.JConsole:
        功能:JConsole是JDK自带的Java监控和管理工具,可以通过JMX监控JVM的资源使用情况,如内存、线程、CPU等。
        优点:轻量级,适合实时监控。
        适用场景:适用于实时监控JVM的运行状态。

3.Java Mission Control (JMC):
        功能:JMC是JDK自带的高级性能分析工具,主要用于监控和分析Java应用的长时间运行情况。它包括Flight Recorder功能,可以记录JVM运行时的详细信息。
        优点:适用于长时间运行的应用程序,能够深入分析性能瓶颈。
        适用场景:适用于企业级Java应用的深度性能分析。

4.IBM Thread and Monitor Dump Analyzer (TMDA)
        功能:TMDA用于分析Java线程转储(Thread Dump)和监控转储(Monitor Dump),帮助诊断线程挂起、死锁和资源争用等问题。相同功能的工具包括ThreadDumpViewer、FastThread等
        优点:特别适用于处理IBM JVM(如OpenJ9)的转储文件。
        适用场景:适用于IBM环境下的Java应用性能调优和故障排查。

5.IBM HeapAnalyzer

IBM HeapAnalyzer 是一个专门用于分析Java堆转储文件的工具,能够帮助开发者找出内存泄漏和对象占用内存的情况。通过详细的堆结构分析,HeapAnalyzer 可以直观地展示Java对象的内存分配情况,并帮助开发人员找到潜在的内存问题。
HeapAnalyzer的主要功能:

    1.内存泄漏检测:自动识别内存泄漏对象,并提供详细的引用链分析。
    2.对象分配分析:分析对象在内存中的分布情况,帮助了解哪些对象消耗了大量内存。
    3.可视化分析:通过图形界面,直观显示堆中对象的分布、引用关系等信息,方便定位问题。

这些工具各有侧重,可以根据具体需求选择使用,以更好地分析和优化Java应用程序的性能

6.JProfiler

JProfiler是一个强大的Java应用性能分析工具,广泛用于分析Java应用程序的内存使用、CPU性能、线程行为和数据库访问等。它通过丰富的可视化界面和详细的报告,帮助开发人员优化应用性能,找出瓶颈和问题,JProfiler的主要功能:

  1. CPU分析:监控方法的执行时间,找出性能瓶颈。
  2. 内存分析:检测内存泄漏,分析对象分配和垃圾回收情况。
  3. 线程分析:监控线程状态,找出线程死锁或其他并发问题。
  4. 数据库分析:分析JDBC连接的性能,找出慢查询。

7.GCViewer:
        功能:GCViewer是一个开源工具,用于分析和可视化JVM的垃圾回收(GC)日志,帮助开发人员了解GC行为和性能。
        优点:能够直观地显示GC活动,帮助优化GC策略。
        适用场景:适用于优化JVM的垃圾回收性能。

8.Eclipse Memory Analyzer (MAT):
        功能:MAT是一个强大的内存分析工具,用于分析堆转储文件,帮助开发人员发现内存泄漏和分析内存使用情况。
        优点:能够处理大规模的堆转储文件,提供详细的内存分析报告。
        适用场景:适用于内存泄漏排查和内存使用优化。

9.Spring Boot Admin

Spring Boot Admin 是一个用于管理和监控Spring Boot应用程序的开源工具。它提供了一个简单且易于使用的界面,能够实时监控多个Spring Boot应用程序的健康状态、性能指标、日志信息等。主要功能包括:

1.应用程序监控:
监控Spring Boot应用的健康状况,包括内存使用、线程状态、垃圾回收、系统属性等。
实时查看应用程序的日志输出,帮助快速定位和解决问题。
2.告警功能:
支持配置告警规则,当应用程序出现异常或达到预设的阈值时发送通知。
通知方式支持邮件、Slack、Webhook等。
3.应用程序注册:
应用程序可以通过Spring Boot Admin的客户端库自动注册到管理界面,也可以通过手动配置进行注册。
4.用户管理:
支持多用户访问控制,不同用户可以根据权限查看不同的信息。
提供了简单的认证机制,也可以集成第三方认证服务。

其他:

  • Arthas
  • ctbots

参考:

springboot应用cpu飙升的原因排除_springboot cpu占用太高-CSDN博客

linux中java项目cpu高

java占用CPU很高,如何快速进行gc分析

MySQL执行状态查看与分析_查看mysql运行状态-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2094244.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DOCKER(国内镜像源,安装相关微服务组件,py以及jar包的docker打包(上传私有云以及输出本地文件))

前言 之前单独在旧的帖子下面更新的时候&#xff0c;码字码了1000多字的时候电脑蓝了&#xff0c;重启什么东西都没有&#xff0c;我红了。平台上面的自动保存是针对新文章的。 这周因为隔壁有项目要验收了&#xff0c;我的好大哥就把我派过去配合赶进度了&#xff0c;还体验了…

计频器(Keysight 53210A)

计频器(Keysight 53210A) 一、基本介绍 探棒有两种,第一种是仪器自带的原厂探头,第二种是专门测试晶振的探头,我们的大部分的测试都是测32Khz和 24Mhz的频率,因此测32Khz频率的时候选用原厂探头、测晶振24Mhz频率的时候选用专门测晶振的探头(如下图所示)。----信号频…

YOLO实践

一. 环境安装 参考视频 Pytorch环境安装细节 pytorch安装&#xff1a;一个单独的环境中&#xff0c;能使用pip就尽量使用pip&#xff0c;实在有问题的情况&#xff0c;例如没有合适的编译好的系统版本的安装包&#xff0c;再使用conda进行安装&#xff0c;不要来回混淆CUDA是…

上网行为管理系统的功能有哪些(员工全网行为管理解决方案)

员工在工作中的上网行为日益多样化&#xff0c;这不仅带来了工作效率的提升&#xff0c;也带来了诸多管理上的挑战。 网络黑客攻击、数据泄露、非工作相关活动的占用带宽等问题层出不穷&#xff0c;对企业的信息安全和运营效率构成了严重威胁。 因此&#xff0c;上网行为管理…

HIC-YOLOv5:改进的YOLOv5用于小对象检测

HIC-YOLOv5: Improved YOLOv5 For Small Object Detection 摘要 小目标检测是物体检测领域的一大难点。已有的一些工作对这一任务提出了改进&#xff0c;例如增加若干个注意块或改变特征融合网络的整体结构。然而&#xff0c;这些模型的计算开销很大&#xff0c;使得部署实时目…

Leetcode面试经典150题-136.只出现一次的数字

解法都在代码里&#xff0c;不懂就留言或者私信 这个题不知道为啥会考&#xff0c;过于简单了&#xff0c;我解题写注释用了两分钟不到&#xff0c;5行代码。。。 class Solution {public int singleNumber(int[] nums) {/**这个题目确实时间的题&#xff0c;根据位运算法则我…

公安监所智慧监管解决方案

1. 项目背景与政策解读 《智慧监管行业背景》部分强调了国家关于推进智慧监管建设的指导意见&#xff0c;以及特定省份发布的“智慧新监管”建设规范&#xff0c;旨在实现监所管理的规范化、标准化和信息化。 2. 监所建设目标 根据政策要求&#xff0c;监所建设内容涵盖数字…

无人机之云台的作用

无人机云台在无人机技术中扮演着至关重要的角色&#xff0c;其作用主要体现在以下几个方面&#xff1a; 一、 确保拍摄稳定性 防抖动&#xff1a;无人机在飞行过程中&#xff0c;尤其是在复杂环境下&#xff0c;如遇到风力干扰或进行高速飞行时&#xff0c;机身容易产生震动和…

MySQL数据库---JDBC编程

1.目录 目录 1. 数据库编程的必备条件 2. Java的数据库编程&#xff1a;JDBC 3.安装工作JDBC&#xff1a; 1)使用经典版找到对应版本下载 2)点击Files栏目的jar 3)用文件夹打开 4)一直点进去会得到此界面 4.环境配置 1)下载 jar 2)把jar导入到自己的项目中. a)先在项…

算法训练营——day1数组二分查找

数组是存放在连续空间上的相同数据类型的集合。 注意&#xff1a;下标从0开始&#xff1b;内存空间连续。 正因为数组的内存地址空间连续&#xff0c;所以在删除、添加元素的时候需要移动其他元素。 数组的元素不能删除&#xff0c;只能覆盖&#xff01; 二维数组特殊 在C中&…

多目标应用:基于NSGA3的移动机器人路径规划研究(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人&#xff08;Mobile robot&#xff0c;MR&#xff09;的路径规划是 移动机器人研究的重要分支之&#xff0c;是对其进行控制的基础。根据环境信息的已知程度不同&#xff0c;路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

Python函数(11自定义模块第三方模块内置模块)

Python基础语法文章导航&#xff1a; Python基础&#xff08;01初识数据类型&变量&#xff09;Python基础&#xff08;02条件&循环语句&#xff09;Python基础&#xff08;03字符串格式化&运算符&进制&编码&#xff09;Python基础&#xff08;04 基础练习…

定时器方案:时间表盘

目录 一&#xff1a;前言 二&#xff1a;手搓时间表盘 1、任务结点&#xff0c;层级&#xff0c;表盘的结构体 2、表盘的初始化 3、添加定时任务 4、删除定时任务 5、检查任务是否超时 6、清空任务 一&#xff1a;前言 我之前有两篇文章是写定时器方案的&#xff0c;大家…

智菜谱推|基于SprinBoot+vue的智能菜谱推荐系统(源码+数据库+文档)

智能菜谱推荐系统 基于SprinBootvue的智能菜谱推荐系统 一、前言 二、系统设计 三、系统功能设计 系统功能实现 管理员功能模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂…

【开源免费】基于SpringBoot+Vue.JS渔具租赁系统(JAVA毕业设计)

本文项目编号 T 005 &#xff0c;文末自助获取源码 \color{red}{T005&#xff0c;文末自助获取源码} T005&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 渔…

低空经济概念火爆:无人机飞手人才培养先行

随着科技的飞速发展&#xff0c;低空经济作为新兴的经济形态&#xff0c;正以前所未有的速度崛起&#xff0c;成为推动产业升级和经济发展的新引擎。无人机作为低空经济的重要组成部分&#xff0c;其应用领域已从最初的军事侦察、航拍扩展到农业植保、物流配送、环境监测、应急…

使用corrplot绘制行、列不同,且带有p值显著性标注的相关系数图

导读&#xff1a; 相关系数衡量两个变量之间的线性关系&#xff0c;通常以N*N的矩阵形式展示。例如样品vs样品&#xff0c;或者基因vs基因的相关性。本文介绍了使用corrplot R包绘制M*N的相关系数矩阵&#xff0c;例如M个基因表达与N个代谢物信号间的相关性&#xff0c;同时带…

国产芯片+国产操作系统打造办公系统

在《使用国产操作系统作为开发系统》一文中&#xff0c;我介绍了将开发系统从 Ubuntu 替换为 Deepin 系统的过程。经过一个多月的使用&#xff0c;Deepin 系统已然成为我的主力开发平台&#xff0c;其顺手程度让我对国产操作系统的信心大增。于是&#xff0c;我开始将目光瞄向公…

顶级开源许可证详解

目录 软件许可证类型&#xff1a;版权左派和宽容型 顶级开源许可证详解 GNU 通用公共许可证 (GPL) Apache 许可证 Microsoft 公共许可证 (Ms-PL) 伯克利软件发行版 (BSD) 通用开发和分发许可证 (CDDL) Eclipse 公共许可证 (EPL) MIT 许可证 了解你的开源许可证&#…

java编辑器——IntelliJ IDEA

java编辑器有两种选择——IntelliJ IDEA和VsCode。其中IntelliJ IDEA现在是企业用的比较多的&#xff0c;是专门为java设计的&#xff0c;而VsCode则是通过插件来实现Java编辑的。 1.IntelliJ IDEA 官网下载链接&#xff1a;https://www.jetbrains.com/idea/ 注意选择社区版…