以下shell腳本,通過預先放置在服務器中,出現資源過高時,可直接運行,便於捕捉程序快照。文件捕捉完成後,直接打包成對應壓縮包。
#!bin/bash/
################ 變量 #############
#項目路徑
tomcatTestPath="/home/tomcat/apache-tomcat-7.0.79-http-test"
tomcatPath="/home/tomcat/apache-tomcat-7.0.79-http"
jdkPath="/usr/jdk"
#時間格式
dateFormat="+%Y-%m-%d %H:%M:%S"
#日誌路徑
logDir0="/home/jvmLog"
#昨天的日期
nowTime=`date "+%Y-%m-%d_%H:%M:%S"`;
###################################
#建文件夾
logDir="$logDir0/$nowTime"
mkdir $logDir;
if [ ! -n "$1" ] ;then
#查詢進程號
pid=`ps -ef | grep tomcat | grep -w $tomcatPath | grep -v 'grep' | grep -v $tomcatTestPath | awk '{print $2}'`
echo -e http服務的進程號=$pid
else
pid="$1"
echo -e "獲取傳入pid=" $pid
fi
cd $jdkPath/bin
#輸出端口號的服務信息
ps -ef | grep $pid > $logDir/severInfo`date "+%Y-%m-%d %H:%M:%S"`.txt
###--------------------------------------------------------
echo -e "---top"
top -n1 > $logDir/topLog`date "+%Y-%m-%d %H:%M:%S"`.txt;
sleep 5;
top -n1 > $logDir/topLog`date "+%Y-%m-%d %H:%M:%S"`.txt;
###--------------------------------------------------------
echo -e "---jstack"
./jstack -l $pid >$logDir/jstackLog`date "+%Y-%m-%d %H:%M:%S"`.txt;
sleep 5;
./jstack -l $pid >$logDir/jstackLog`date "+%Y-%m-%d %H:%M:%S"`.txt;
###--------------------------------------------------------
echo -e "---jstat"
./jstat -gcutil $pid 1000 15 > $logDir/jstatLog`date "+%Y-%m-%d %H:%M:%S"`.txt;
sleep 5;
./jstat -gcutil $pid 1000 15 > $logDir/jstatLog`date "+%Y-%m-%d %H:%M:%S"`.txt;
###--------------------------------------------------------
echo -e "---jmap"
./jmap -dump:live,format=b,file=$logDir/problem`date "+%Y-%m-%d_%H:%M:%S"`.bin $pid
sleep 5;
./jmap -dump:live,format=b,file=$logDir/problem`date "+%Y-%m-%d_%H:%M:%S"`.bin $pid
#壓縮文件
echo -e "---壓縮文件夾"
tar -zcvPf $logDir.tar.gz $logDir