通過寫指令碼的方式自動獲取JVM內的程序堆疊資訊等內容
阿新 • • 發佈:2020-07-15
公司轉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