shell脚本输出JAVA线程堆栈和JVM内存使用情况

shell脚本输出JAVA线程堆栈和JVM内存使用情况

#!/bin/bash
SERVER_NAME=XXX
DEPLOY_DIR=/user_projects/domains/${SERVER_NAME}/ #启动语句中能识别应用的关键字
outDir=/u02/coreprd/corelog/${SERVER_NAME}/  #输出路径
#awk的用法,一行中的打印第二个参数,表示进程ID
PIDS=`ps -ef | grep  java | grep "${DEPLOY_DIR}" |awk '{print $2}'`
echo $PIDS
#校验进程ID是否存在
if [ -z "$PIDS" ]; then
    echo "ERROR: The $SERVER_NAME does not started"
    exit 1
fi
#校验获取到的PID是否唯一
pid_len=${#PIDS[*]}
if [ ${pid_len} != 1 ]; then
    echo "ERROR: The $SERVER_NAME length is ${pid_len} . The PID length must be 1,please correct the shell script  "
    exit 1
fi
#定义输出文件的路径
current=`date +"%Y%m%d%H%M_%S"`
filePath="${outDir}jstack_${SERVER_NAME}_${PIDS}_${current}.log"echo "Doing jstack the $SERVER_NAME ..."
for PID in $PIDS ; do
    #先用jstack命令打印出堆栈信息
    jstack -l $PID > $filePath
    echo "jstack dump Success!"
    echo "dump File: ${filePath}"
    #睡眠1秒
    sleep 1 
    #使用jmap -heap 在文件末尾追加JVM内存信息。
    jmap -heap  $PID >> $filePath
    echo "jmap -heap Success!"
done

 

 

posted @ 2020-10-20 18:27  ~风铃~  阅读(1361)  评论(0)    收藏  举报