线上java程序CPU使用过高,通过Shell脚本排查问题

博主针对频繁出现的CPU过高警告,创建了一个Shell脚本,用于快速定位并显示最消耗CPU的Java线程,简化了常规的排查流程。脚本包括获取Java进程ID,找出最高CPU使用率的线程,转换线程ID为16进制,并通过jstack获取详细线程信息,提高了问题诊断效率。
摘要由CSDN通过智能技术生成

背景

由于最近上线业务经常接收到CPU过高的警告,影响了服务的正常运行,于是就想着排查一下。但是按照一般的流程:

1.jps 查看java进程。
2.top -Hp java进程ID获取到线程ID。
3.打印出线程ID的16进制值。
4.jstack java进程ID | grep 线程ID的16进制值。

这一系列操作,必定费时一定时间,等我敲完命令之后都不一定我这个线程还存在,所以就搞了一个shell脚本,手动执行一下。

脚本

#!/bin/bash
javaId=`pgrep java`
echo "java 进程ID为 $javaId"
topJavaId=`top -b -n 1 -Hp ${javaId}|grep java|head -n 1|awk '{print $1}'`
cpuUsage=`top -b -n 1 -Hp ${javaId}|grep java|head -n 1|awk '{print $9}'`
echo "最耗cpu的使用率为 $cpuUsage"
topJavaId16=`printf "%x" ${topJavaId}`
topJavaId16ThreadName="nid=0x${topJavaId16}"
echo "最耗cpu的java线程ID 16进制为 $topJavaId16ThreadName"
threadDetail=`jstack ${javaId}|grep ${topJavaId16} -C 10`
echo "$threadDetail"

实战结果

在这里插入图片描述
可以很清楚的看出占用CPU过高的是那些应用,然后进行一些优化即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值