排查java程序,資源佔用過高

以下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

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