java进程cpu占用高如何排查
问题:
公司参加HW期间,项目两台双活的jboss服务器频繁触发cpu利用率过高告警,cpu利用率长时间在90%以上。
排查思路:
第一步:在两台Linux服务器上,执行top命令,并按大写P以cpu利用率排序,确定cpu占用最高的进程为 java进程
那么,java进程cpu占用过高该如何排查呢,我们从两个角度出发:
(1)执行任务的java线程本身存在bug,死循环或者操作本身耗cpu,导致cpu占用过高
(2)jvm发生频繁gc,导致cpu过高
第二步:先排查java任务线程本身,确定什么线程cpu占用过高
(1)方法一:ps -mp [java进程id] -o THREAD,tid,time | sort -n 找到cpu占用最大的线程id
注意,该方法在生产环境测试,发现无法找到cpu占用高的线程,显示所有线程cpu占用均为0,因此实际排查采用方法二
(2)使用top -H -p [java进程id],找到cpu占用较高的线程id,如下图所示,左边红框标注的PID列为线程id
第三步:计算java线程id的16进制值,因为后续用jstack看到的线程快照中,线程id为小写十六进制值
(1)可百度在线进制转换
(2)可使用windows自带的计算器,程序员模式,可转换十六进制
(3)Linux可使用命令:printf "%x\n" [线程_id]
第四步:使用命令 jstack [java进程pid] | grep [线程id十六进制值] -A 30(-A 30表示向下打印30行)
分析上图可知,线程在做正则匹配,查看完整堆栈可定位到具体代码位置,分析后,确定在做url的正则匹配。继续分析其他线程,发现基本都在做url正则匹配。
后续分析,则需要结合业务代码分析,正则匹配是否耗时。
正则分析参考博客:https://blog.csdn.net/weixin_33023873/article/details/114740786
第五步:从gc角度出发,是否存在大量gc,首先确定当前内存消耗情况,使用top命令或者查看设备监控管理系统,确定内存利用率达97%:
第六步:确认gc次数,使用命令 jstat -gc [java进程ID]:
YGC,表示 Young GC,也就是Minor GC,发生在新生代中的GC
FGC,表示 Full GC,发生在老年代中的GC
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGCT:年轻代垃圾回收消耗时间
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间如何计算gc频率,参考:https://blog.csdn.net/qq_18671415/article/details/104446568
结合上图可知,程序运行以来共发生7436次YGC,63次FGC,gc次数较多
基本可以说明存在频繁GC导致cpu占用高的问题
第七步:使用命令dump 内存堆存储快照:jmap -dump:format=b,file=/tmp/my.hprof [java进程id]
第八步:使用内存分析工具,如Eclipse Memory Analyzer等分析my.hprof文件,分析内存那块占用大,存在内存泄露,导致空间无法释放。
总结:
cpu利用率过高排查,需要从两个角度排查,一是自身任务线程是否存在bug,二是是否内存泄露导致触发频繁gc;然后利用top、jstack、jmap等工具,定位出问题的代码位置,然后针对性分析修改。
java进程cpu占用高如何排查相关推荐
- java进程CPU占用高如何排查-案例二
近期项目新版本上线遇到cpu冲高现象,依据之前的经验,把这次排查过程记录下. 这次排查参考了之前记录的经验,还是很有用的:java进程cpu占用高如何排查_停5s的博客-CSDN博客_java进程cp ...
- Java进程CPU占用高导致的网页请求超时的故障排查
作者:荣书 来源:https://blog.51cto.com/rongshu/2426712 一.发现问题的系统检查: 一个管理平台门户网页进统计页面提示请求超时,随进服务器操作系统检查load a ...
- Python应用CPU占用高问题排查
Python应用CPU占用高问题排查 http://t.zoukankan.com/honglingjin-p-15159199.html公司购买了一套由外部供应商提供的呼叫中心系统,在使用的过程中发 ...
- mc java 连接超时_Java进程CPU占用高导致的网页请求超时的故障排查
一.发现问题的系统检查: 一个管理平台门户网页进统计页面提示请求超时,随进服务器操作系统检查load average超过4负载很大,PID为7163的进程占用到了800%多.  二.定位故障 根据这 ...
- java 进程 cpu占用_JAVA进程CPU占用高的故障排查 – 运维那些事
问题分析: 1.程序属于CPU密集型,和开发沟通过,排除此类情况. 2.程序代码有问题,出现死循环,可能性极大. 解决过程: 1.根据top命令,发现PID为2633的Java进程占用CPU高达300 ...
- Linux java进程CPU占用过高解决方案
总目录 一.前言: 二.模拟java程序CPU过高 1 修改代码为死循环 2 部署在linux上 访问该接口 根据top命令查看CPU参数 3 通过ps命令查看这个程序的线程信息,tid代码线程ID, ...
- Java进程CPU使用率高排查
1.使用top 定位到占用CPU高的进程PID top 通过ps aux | grep PID命令 2.获取线程信息,并找到占用CPU高的线程 ps -mp pid -o THREAD,tid,tim ...
- oracle rdbms 占CPU,求助,数据库某个进程cpu占用高
客户管理员反映数据库cpu占用占用,查看后发现有个进程cpu占用特别高,有一条sql似乎进入了死循环,hanganalyzis分析文件: Trace file /oracle/diag/rdbms/o ...
- 使用dlv分析golang进程cpu占用高问题
c++通过dbg分析内存和cpu,可能大家都会.本篇主要分析通过delve分析golang程序cpu占用高的问题. delve是golang推荐的专门go语言调试工具,用来替代gdb.golang组织 ...
最新文章
- Python 实现自动化批量重打包Android Apps
- R语言tidyquant包的tq_transmute函数计算持有某只股票的天、月、周收益率、ggplot2使用条形图(bar plot)可视化股票月收益率数据条形图
- PHP 梯形图,学习PLC,不要先翻资料,干就完了.搞起你的第一个梯形图.
- OAuth2.0_JWT令牌-生成令牌和校验令牌_Spring Security OAuth2.0认证授权---springcloud工作笔记148
- CentOS 6升级默认python版本
- scikit-learn和tensorflow的区别
- qq音乐的歌词接口中例如#58,#46的特殊符号编码使用js进行转义
- 机器学习基石 作业二
- POJ 3376 Finding Palindromes
- 大学几年一直在“半瓶哐镗”的我
- pycharm清华镜像源使用
- VMWare ESXi上传iso镜像文件
- 哈利波特魔法觉醒游戏攻略分析
- 由OSS AccessKey泄露引发的思考
- Synopsys Formality 2018操作流程
- 打造原生的图文混排控件
- NOIP复习篇———动态规划
- lcs算法c语言代码,动态规划算法-LCS
- 网络三.网络传输设备:集线器,交换机,路由器
- el-select下拉框不同证件类型校验思路