排查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

你可能感兴趣的:(排查java程序,资源占用过高)