1. 程式人生 > 實用技巧 >通過寫指令碼的方式自動獲取JVM內的程序堆疊資訊等內容

通過寫指令碼的方式自動獲取JVM內的程序堆疊資訊等內容

公司轉java之後 經常會遇到java程序佔用CPU特別多的情況. 每次連上機器進行處理都比較慢了. 索性自己寫一個指令碼, 把想要查詢的資訊直接彙總進去. 這樣的話 就簡單很多了.

指令碼也很簡單主要如下:

export PATH=$PATH:/gscloud/jstack/runtime/java/x86_64-linux/bin/
export pid=`jps |grep caf-bootstrap.jar |awk '{print $1 }' `
echo $pid
export now=`date +%Y%m%d%H%M`
echo $now.log
#cd /javalog
top -Hp $pid -n 1
|awk '{print "佔CPU較高的程序號 " $1 " 該程序CPU佔用率 " $9}' |sed -n '8,12p' >> $now.log echo "JVM虛擬機器的引數資訊" >> $now.log jcmd $pid VM.flags >> $now.log echo "JVM虛擬機器的程序資訊" >> $now.log jcmd $pid Thread.print >> $now.log echo "JVM虛擬機器的類資訊" >> $now.log jcmd $pid GC.class_histogram
>> $now.log echo "JVM虛擬機器的GC堆的資訊" >> $now.log jcmd $pid GC.heap_info >> $now.log top -Hp $pid -n 2 >> $now.log echo " " >> $now.log top -Hp $pid -n 1 |awk '{print "佔CPU較高的程序號 " $1 " 該程序CPU佔用率 " $9}' |sed -n '8,12p' >> $now.log echo "簡單統計不同程序的state資訊 " >> $now.log cat $now.log
|grep "java.lang.Thread.State:" |awk '{print $2$3$4$5}' |sort |uniq -c >> $now.log #tar -zcvf $now.log.tar.gz $now.log --remove-files