0
点赞
收藏
分享

微信扫一扫

计划任务方式定期获取jvm dump的方法

说明

  • 产品最近有一些问题,想着能够每隔一段时间抓取一下dump文件.
  • 需求 可以定期抓取, 需要注意磁盘空间的使用.

实现方法

  • 定时任务使用 crontab 计划任务来做
  • 预定义获取jvm dump的命令文件为: /deploy/getjvmdump
crontab -e 打开计划任务 增加如此内容. 
5 */1 * * * /deploy/getjvmdump
没个准点的 第五分钟执行一遍命令

脚本内容

export JAVA_HOME=/app/server/runtime/java/x86_64-linux/
export PATH=/app/server/runtime/java/x86_64-linux/bin/:$PATH

if [ ! -d /jvmdump ]; then
mkdir -p /jvmdump
fi

dumptime=`date +%Y%m%d%H%M`
dumpid=`jps |grep caf-boot|awk '{print $1}' |head -n 1`

if [[ ! $dumpid ]]; then
dumpid=`jps |grep PropertiesLauncher|awk '{print $1}' |head -n 1`
fi

# 需要区分正常启动还是优雅启动
echo $dumpid
echo $dumptime
filename=$dumptime"_"$dumpid
echo $filename

jcmd $dumpid GC.heap_dump /jvmdump/$filename.dump
gzip /jvmdump/$filename.dump
cd /jvmdump/
find /jvmdump/*.gz -mtime +1 -exec rm -rf {} \;
# 清理一天之前的dump文件. 注意这个命令要慎用 出问题需要跑路.

获取其他统计信息

export JAVA_HOME=/app/server/runtime/java/x86_64-linux/
export PATH=/app/server/runtime/java/x86_64-linux/bin/:$PATH

if [ ! -d /jvmdump ]; then
mkdir -p /jvmdump
fi

dumptime=`date +%Y%m%d%H%M`
dumpid=`jps |grep caf-boot|awk '{print $1}' |head -n 1`

if [[ ! $dumpid ]]; then
dumpid=`jps |grep PropertiesLauncher|awk '{print $1}' |head -n 1`
fi

# 需要区分正常启动还是优雅启动
echo $dumpid
echo $dumptime
filename=$dumptime"_"$dumpid
echo $filename

jcmd $dumpid VM.uptime >>/jvmdump/trace_$filename.log
jcmd $dumpid VM.flags>>/jvmdump/trace_$filename.log
jcmd $dumpid Thread.print>>/jvmdump/trace_$filename.log
jcmd $dumpid GC.class_histogram >>/jvmdump/trace_$filename.log
jcmd $dumpid GC.heap_info >>/jvmdump/trace_$filename.log
# 抓取信息到指定路径..




举报

相关推荐

0 条评论