定义脚本dump.sh 用于收集当前运行的java程序的相关信息,内容,虚拟内存统计,实时系统监控,端口使用情况等。JDK_PATH用于定义jdk路径,优先使用设置的sdk路径。没有就用系统。
#!/bin/bash
DEPLOY_DIR=`pwd`
JDK_PATH=$DEPLOY_DIR/jdk1.8.0_171/bin
echo "JDK_PATH: $JDK_PATH;"
LOGS_DIR=$DEPLOY_DIR/logs
echo "LOGS_DIR: $LOGS_DIR;"
if [ ! -d $LOGS_DIR ]; then
mkdir $LOGS_DIR
fi
DUMP_DIR=$LOGS_DIR/dump
if [ ! -d $DUMP_DIR ]; then
mkdir $DUMP_DIR
fi
DUMP_DATE=`date +%Y%m%d%H%M%S`
DATE_DIR=$DUMP_DIR/$DUMP_DATE
if [ ! -d $DATE_DIR ]; then
mkdir $DATE_DIR
fi
PIDS=`ps -ef | grep java | grep -v grep |awk '{print $2}'`
if [ -z "$PIDS" ]; then
echo "ERROR: The java service does not started!"
exit 1
fi
for PID in $PIDS ; do
echo "******** $PID Info ********"
#java虚拟机自带的一种堆栈跟踪工具
if [ -r ${JDK_PATH}/jstack ]; then
${JDK_PATH}/jstack $PID > $DATE_DIR/jstack-$PID.dump 2>&1
echo "${JDK_PATH}/jstack $PID"
else
jstacke $PID > $DATE_DIR/jstack-$PID.dump 2>&1
echo "jstack $PID"
fi
#它可以用来查看正在运行的java应用程序的扩展参数(JVM中-X标示的参数);甚至支持在运行时修改部分参数
if [ -r ${JDK_PATH}/jinfo ]; then
${JDK_PATH}/jinfo $PID > $DATE_DIR/jinfo-$PID.dump 2>&1
echo "${JDK_PATH}/jinfo $PID"
else
jinfo $PID > $DATE_DIR/jinfo-$PID.dump 2>&1
echo "jinfo $PID"
fi
#通常用来分析系统的垃圾回收情况
if [ -r ${JDK_PATH}/jstat ]; then
${JDK_PATH}/jstat -gcutil $PID > $DATE_DIR/jstat-gcutil-$PID.dump 2>&1
echo "${JDK_PATH}/jstat -gcutil $PID"
else
jstat -gcutil $PID > $DATE_DIR/jstat-gcutil-$PID.dump 2>&1
echo "jstat -gcutil $PID"
fi
#可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小
if [ -r ${JDK_PATH}/jstat ]; then
${JDK_PATH}/jstat -gccapacity $PID > $DATE_DIR/jstat-gccapacity-$PID.dump 2>&1
echo "${JDK_PATH}/jstat -gccapacity $PID"
else
jstat -gccapacity $PID > $DATE_DIR/jstat-gccapacity-$PID.dump 2>&1
echo "jstat -gccapacity $PID"
fi
#打印内存使用的摘要信息
if [ -r ${JDK_PATH}/jmap ]; then
${JDK_PATH}/jmap $PID > $DATE_DIR/jmap-$PID.dump 2>&1
echo "${JDK_PATH}/jmap $PID"
else
jmap $PID > $DATE_DIR/jmap-$PID.dump 2>&1
echo "jmap $PID"
fi
#java heap信息
if [ -r ${JDK_PATH}/jmap ]; then
${JDK_PATH}/jmap -heap $PID > $DATE_DIR/jmap-heap-$PID.dump 2>&1
echo "${JDK_PATH}/jmap -heap $PID"
else
jmap -heap $PID > $DATE_DIR/jmap-heap-$PID.dump 2>&1
echo "jmap -heap $PID"
fi
#打印比较简单的各个有多少个对象占了多少内存的信息
if [ -r ${JDK_PATH}/jmap ]; then
${JDK_PATH}/jmap -histo $PID > $DATE_DIR/jmap-histo-$PID.dump 2>&1
echo "${JDK_PATH}/jmap -histo $PID"
else
jmap -histo $PID > $DATE_DIR/jmap-histo-$PID.dump 2>&1
echo "jmap -histo $PID"
fi
#列出所有由某个PID对应的进程打开的文件
lsof -p $PID > $DATE_DIR/lsof-$PID.dump
echo lsof -p $PID
echo "******** $PID end ********"
done
#命令查看本机已经开启的端口
if [ -r /bin/netstat ]; then
/bin/netstat -an > $DATE_DIR/netstat.dump 2>&1
echo "netstat success"
else
echo "/bin/netstat is not exit"
fi
#用于输出CPU和磁盘I/O相关的统计信息
if [ -r /usr/bin/iostat ]; then
/usr/bin/iostat > $DATE_DIR/iostat.dump 2>&1
echo "iostat success"
else
echo "/usr/bin/iostat is not exit"
fi
#实时系统监控工具 系统启动以后所有信息的平均值
if [ -r /usr/bin/mpstat ]; then
/usr/bin/mpstat > $DATE_DIR/mpstat.dump 2>&1
echo "mpstat success"
else
echo "/usr/bin/mpstat is not exit"
fi
# 虚拟内存统计 报告关于进程、内存、I/O等系统整体运行状态
if [ -r /usr/bin/vmstat ]; then
/usr/bin/vmstat > $DATE_DIR/vmstat.dump 2>&1
echo "vmstat success"
else
echo "/usr/bin/vmstat is not exit"
fi
#系统使用和空闲的内存情况 总计物理内存的大小
if [ -r /usr/bin/free ]; then
/usr/bin/free -t > $DATE_DIR/free.dump 2>&1
echo "free success"
else
echo "/usr/bin/free is not exit"
fi
#系统活动情况报告
if [ -r /usr/bin/sar ]; then
/usr/bin/sar > $DATE_DIR/sar.dump 2>&1
echo "sar success"
else
echo "/usr/bin/sar is not exit"
fi
#查询服务器已经运行了多久
if [ -r /usr/bin/uptime ]; then
/usr/bin/uptime > $DATE_DIR/uptime.dump 2>&1
echo "uptime success"
else
echo "/usr/bin/uptime is not exit"
fi
echo "OK!"
echo "DUMP: $DATE_DIR"
mkdir $LOGS_DIR
fi
DUMP_DIR=$LOGS_DIR/dump
if [ ! -d $DUMP_DIR ]; then
mkdir $DUMP_DIR
fi
DUMP_DATE=`date +%Y%m%d%H%M%S`
DATE_DIR=$DUMP_DIR/$DUMP_DATE
if [ ! -d $DATE_DIR ]; then
mkdir $DATE_DIR
fi
PIDS=`ps -ef | grep java | grep -v grep |awk '{print $2}'`
if [ -z "$PIDS" ]; then
echo "ERROR: The java service does not started!"
exit 1
fi
for PID in $PIDS ; do
echo "******** $PID Info ********"
#java虚拟机自带的一种堆栈跟踪工具
if [ -r ${JDK_PATH}/jstack ]; then
${JDK_PATH}/jstack $PID > $DATE_DIR/jstack-$PID.dump 2>&1
echo "${JDK_PATH}/jstack $PID"
else
jstacke $PID > $DATE_DIR/jstack-$PID.dump 2>&1
echo "jstack $PID"
fi
#它可以用来查看正在运行的java应用程序的扩展参数(JVM中-X标示的参数);甚至支持在运行时修改部分参数
if [ -r ${JDK_PATH}/jinfo ]; then
${JDK_PATH}/jinfo $PID > $DATE_DIR/jinfo-$PID.dump 2>&1
echo "${JDK_PATH}/jinfo $PID"
else
jinfo $PID > $DATE_DIR/jinfo-$PID.dump 2>&1
echo "jinfo $PID"
fi
#通常用来分析系统的垃圾回收情况
if [ -r ${JDK_PATH}/jstat ]; then
${JDK_PATH}/jstat -gcutil $PID > $DATE_DIR/jstat-gcutil-$PID.dump 2>&1
echo "${JDK_PATH}/jstat -gcutil $PID"
else
jstat -gcutil $PID > $DATE_DIR/jstat-gcutil-$PID.dump 2>&1
echo "jstat -gcutil $PID"
fi
#可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小
if [ -r ${JDK_PATH}/jstat ]; then
${JDK_PATH}/jstat -gccapacity $PID > $DATE_DIR/jstat-gccapacity-$PID.dump 2>&1
echo "${JDK_PATH}/jstat -gccapacity $PID"
else
jstat -gccapacity $PID > $DATE_DIR/jstat-gccapacity-$PID.dump 2>&1
echo "jstat -gccapacity $PID"
fi
#打印内存使用的摘要信息
if [ -r ${JDK_PATH}/jmap ]; then
${JDK_PATH}/jmap $PID > $DATE_DIR/jmap-$PID.dump 2>&1
echo "${JDK_PATH}/jmap $PID"
else
jmap $PID > $DATE_DIR/jmap-$PID.dump 2>&1
echo "jmap $PID"
fi
#java heap信息
if [ -r ${JDK_PATH}/jmap ]; then
${JDK_PATH}/jmap -heap $PID > $DATE_DIR/jmap-heap-$PID.dump 2>&1
echo "${JDK_PATH}/jmap -heap $PID"
else
jmap -heap $PID > $DATE_DIR/jmap-heap-$PID.dump 2>&1
echo "jmap -heap $PID"
fi
#打印比较简单的各个有多少个对象占了多少内存的信息
if [ -r ${JDK_PATH}/jmap ]; then
${JDK_PATH}/jmap -histo $PID > $DATE_DIR/jmap-histo-$PID.dump 2>&1
echo "${JDK_PATH}/jmap -histo $PID"
else
jmap -histo $PID > $DATE_DIR/jmap-histo-$PID.dump 2>&1
echo "jmap -histo $PID"
fi
#列出所有由某个PID对应的进程打开的文件
lsof -p $PID > $DATE_DIR/lsof-$PID.dump
echo lsof -p $PID
echo "******** $PID end ********"
done
#命令查看本机已经开启的端口
if [ -r /bin/netstat ]; then
/bin/netstat -an > $DATE_DIR/netstat.dump 2>&1
echo "netstat success"
else
echo "/bin/netstat is not exit"
fi
#用于输出CPU和磁盘I/O相关的统计信息
if [ -r /usr/bin/iostat ]; then
/usr/bin/iostat > $DATE_DIR/iostat.dump 2>&1
echo "iostat success"
else
echo "/usr/bin/iostat is not exit"
fi
#实时系统监控工具 系统启动以后所有信息的平均值
if [ -r /usr/bin/mpstat ]; then
/usr/bin/mpstat > $DATE_DIR/mpstat.dump 2>&1
echo "mpstat success"
else
echo "/usr/bin/mpstat is not exit"
fi
# 虚拟内存统计 报告关于进程、内存、I/O等系统整体运行状态
if [ -r /usr/bin/vmstat ]; then
/usr/bin/vmstat > $DATE_DIR/vmstat.dump 2>&1
echo "vmstat success"
else
echo "/usr/bin/vmstat is not exit"
fi
#系统使用和空闲的内存情况 总计物理内存的大小
if [ -r /usr/bin/free ]; then
/usr/bin/free -t > $DATE_DIR/free.dump 2>&1
echo "free success"
else
echo "/usr/bin/free is not exit"
fi
#系统活动情况报告
if [ -r /usr/bin/sar ]; then
/usr/bin/sar > $DATE_DIR/sar.dump 2>&1
echo "sar success"
else
echo "/usr/bin/sar is not exit"
fi
#查询服务器已经运行了多久
if [ -r /usr/bin/uptime ]; then
/usr/bin/uptime > $DATE_DIR/uptime.dump 2>&1
echo "uptime success"
else
echo "/usr/bin/uptime is not exit"
fi
echo "OK!"
echo "DUMP: $DATE_DIR"