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
浙公网安备 33010602011771号