采集jfr数据的脚本
使用直接:bash dump_event_jfr.sh 1h 后面是时间
#!/bin/bash
# dump jfr下载到本地
# touch dump_event_jfr.sh ; chmod u+x dump_event_jfr.sh ; vim dump_event_jfr.sh
# nohup bash dump_event_jfr.sh 1h &
recordMinute=10m
if [[ -n "$1" ]]; then
recordMinute=$1
fi
jfrName=`date +%s`
dumpFileName="${CONTAINER_PROJ}_${CONTAINER_IP_ADDR}_`date +%F`.log.`date +%s`_${recordMinute}.jfr"
dumpFilePath="/persist/logs/${dumpFileName}"
echo "正在dump文件, pid=`cat /persist/logs/app.pid`, dumpFilePath=${dumpFilePath}"
jcmd `cat /persist/logs/app.pid` VM.unlock_commercial_features
jcmd `cat /persist/logs/app.pid` JFR.start name=${jfrName} duration=${recordMinute} settings=profile filename=${dumpFilePath} maxsize=1g
# 等待时间到达
sleep ${recordMinute}
while jcmd `cat /persist/logs/app.pid` JFR.check | grep ${jfrName} | grep -q running ; do
sleep 1s
done
echo "dump文件完成, 当前jfr的状态, pid=`cat /persist/logs/app.pid`, dumpFilePath=${dumpFilePath}"
jcmd `cat /persist/logs/app.pid` JFR.check
# jcmd `cat /persist/logs/app.pid` JFR.stop name=${jfrName}
# 压缩文件
cd /persist/logs
dumpFileNameTarGz=${dumpFileName}.tar.gz
echo "压缩文件, ${dumpFileNameTarGz}"
tar -zcvf ${dumpFileNameTarGz} ${dumpFileName}
ls -alsh ${dumpFileNameTarGz}
# 上传文件
echo "上传文件, ${dumpFileNameTarGz}"
rsync -avz --progress --bwlimit=5000 ${dumpFileNameTarGz} 10.10.25.7::share
# 删除文件
echo "删除文件, dumpFileName=${dumpFileName}, dumpFileNameTarGz=${dumpFileNameTarGz}"
rm -rf ${dumpFileName}
rm -rf ${dumpFileNameTarGz}
# 输出下载命令
echo "下载命令:"
echo "rsync -avz --progress --bwlimit=5000 10.10.25.7::share/${dumpFileNameTarGz} /Users/fmeng/Downloads/hprof"
分析工具:https://download.csdn.net/download/singgel/19662661