查找消耗cpu最高的Java進程

#!/bin/bash
if [ -z "$1" ]; then
        ### 1.先找到消耗cpu最高的Java進程 ###
        pid=`ps -eo pid,%cpu,cmd --sort=-%cpu | grep java | grep -v grep | head -1 | awk 'END{print $1}' `
        if [ "$pid" =  ""  ]; then
                echo "無Java進程,退出。"
                exit
        fi
else
        pid=$1
fi
curTime=$(date +%Y%m%dT%H%M%S)
dumpFilePath="./pid$pid−$curTime.jstack"

echo -e  "java 進程ID爲 $pid" > $dumpFilePath
ps -ef|grep $pid >> $dumpFilePath
topThreadId=`top -b -n 1 -Hp $pid|grep java|head -n 1|awk '{print $1}'`
cpuUsage=`top -b -n 1 -Hp $pid|grep java|head -n 1|awk '{print $9}'`
echo -e  "最耗cpu的使用率爲 $cpuUsage">>$dumpFilePath
topThreadId16=`printf "%x" $topThreadId`
topThreadId16ThreadName="nid=0x$topThreadId16"
echo -e  "最耗cpu的java線程ID 16進製爲 $topThreadId16ThreadName">>$dumpFilePath
jstack -l $pid >>$dumpFilePath
#threadDe -e tail=`jstack ${pid}|grep ${topThreadId16} -C 10`
#echo "$threadDetail

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章