栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

背景

由于最近上线业务经常接收到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过高的是那些应用,然后进行一些优化即可。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/988021.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号