您的位置:首页 > 其它

jvm排查问题常用命令脚本

2017-11-14 22:15 288 查看
#!/bin/sh

### ====================================================================== ###
##                                                                          ##
##                      snapshot              script                        ##
##                                                                          ##
### ====================================================================== ###

source /etc/profile

USAGE="Usage: shapshot.sh <tomcat pid> <tomcat port>"
SYSTEM_PROPERTY=""

# if no args specified, show usage
if [ $# -lt 2 ]; then
echo $USAGE
exit 1
fi
PID=$1
TOMCATPORT=$2
echo "tomcat pid="$1
echo "tomcat port="$2
#echo "Determine if a directory exists /opt/tmp"
if [ -e "/opt/snapshot" ]; then
echo "/opt/snapshot exists"
else
mkdir -p /opt/snapshot;
fi

echo "开始存储当前机器负载情况"
cat /proc/loadavg > /opt/snapshot/loadavg.log

echo "当前机器负载情况存储完成"

echo "开始抓堆栈共三次"
path="/opt/snapshot/"$PID"_1_stack.log"
jstack $PID > $path
sleep 3
path="/opt/snapshot/"$PID"_2_stack.log"
jstack $PID > $path
sleep 3
path="/opt/snapshot/"$PID"_3_stack.log"
jstack $PID > $path
path="/opt/snapshot/"$PID"_top10_thread.log"
top -bp $PID -H |tail -n +8 | head -n 10 > $path
echo "堆栈抓取完成"

echo "记录当前堆的使用情况"
jmap -heap $PID > /opt/snapshot/$PID"_heap.log"

echo "dump 当前进程的内存"
jmap -dump:format=b,file="/opt/snapshot/"$PID".hprof" $PID

echo "记录当前进程GC情况,记录20S"
path="/opt/snapshot/"$PID"_gc.log"
jstat -gcutil $PID 2000 10 > $path

echo "记录三个代的内存占用情况"
path="/opt/snapshot/"$PID"_gccapacity.log"
jstat -gccapacity $PID > $path

#echo "记录连接当前tomcat的tcp连接数"
#path="/opt/snapshot/"$PID"_tcp.log"
#netstat -n | grep "$TOMCATPORT" | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' > $path

echo "记录当前进程打开线程数"
path="/opt/snapshot/"$PID"_pstree.log"
pstree $PID > $path

echo "记录当前进程打开的文件数"
path="/opt/snapshot/"$PID"_lsof.log"
lsof -p $PID | wc -l > $path

echo "系统当前快照完成,请手动转存log,并且重启服务,快照文件在 /opt/snapshot目录下"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: