【脚本分享】linux cpu使用率高诊断用

脚本用途:
linux JVM进程使用很高时,可以使用该脚本一键获取jvm进程top线程占用的CPU情况,协助定位问题代码。

su - service
#java的进程号(必须修改)
pid=254
#按线程cpu使用量降序排列,取top,默认10(按需修改)
topcpun=10
#按线程数量降序排列,取top,默认10(按需修改)
topnum=10
mydate=$(date +%s);

#jstack命令的绝对路径
cmd=$(ls -l /proc/$pid/exe | awk '{print $NF}' | sed 's/java$/jstack/')
#获取JVM线程堆栈
$cmd $pid > /tmp/threaddump_$mydate;

#获取使用CPU最高top 10线程
top -b -Hp $pid -n 1 -d 1 | awk '$1~/[0-9]+$/{print}' | awk 'BEGIN{ORS=" "}{print $9;printf "0x%x\n", $1}' | sort -rnk 1 | uniq -f 1 | head -n $topcpun > /tmp/topcputhread_$mydate;awk -v fname=/tmp/threaddump_$mydate -v topcpun=$topcpun 'BEGIN{ORS="";print "\n========1.TOP "topcpun" thread(cpu)============\n";print "cpu%\tTID\tThreadName\n"}{print $1"\t"$2"\t";system("grep nid="$2 " "fname" |sed 's/#.*$//'")}' /tmp/topcputhread_$mydate;

#获取指定线程的堆栈详细信息(trace details)
awk 'BEGIN{print "\n=======================trace details=======================\n"}';awk '{print $2}' /tmp/topcputhread_$mydate | xargs -I v1 awk '/nid=v1/,/^$/ {print}' /tmp/threaddump_$mydate;

#按线程数量降序排列,取top,默认10
awk -v topnum=$topnum 'BEGIN{print "\n=======================2.TOP "topnum" thread(count)=======================\n";printf("%-50s\t%10s\n","ThreadName","Count")}' ;awk '/nid=0x/ {ary[$1]++}END{for (i in ary) {printf("%-50s\t%10d\n",i,ary[i])}}' /tmp/threaddump_$mydate |sort -rnk 2 | head -$topnum | tee /tmp/topnumthread_$mydate;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值