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