疯狂GC的第二种处理方式-ChatGPT的学习之四
摘要
上一个脚本太复杂了.
而且要改启动脚本.
课间休息跟人扯淡聊起来 chatGPT 发现他的语法很有用
但是思路不太对.
不过突然根据文档里写的想到了一个新的思路.
获取GC信息
while true
date >> /zhaobsh/gcutil
jstat -gcutil `jps |grep caf |awk '{print $1}' |head -n 1 ` 1000 1 >> /zhaobsh/gcutil
done
获取最近一次的 FullGC的次数
timenow=$(cat /zhaobsh/gcutil |grep FGCT -A 1|grep -v FGCT |awk '{print $9}' |grep -v '^$' |tail -n 60 |tail -n 1)
获取距离现在一分钟时的FullGC的次数
timebefore=$(cat /zhaobsh/gcutil |grep FGCT -A 1|grep -v FGCT |awk '{print $9}' |grep -v '^$' |tail -n 60 |head -n 1)
获取差值就可以
gctime=$(($timenow - $timebefore)
echo $gctime
判断处理
如果 gctime > 1
说明最后一分钟有两次以上的FullGC的.
可以执行重启操作.
整体脚本好像也挺复杂的...
整体脚本
while true
do
timenow=$(cat /zhaobsh/gcutil |grep FGCT -A 1|grep -v FGCT |awk '{print $9}' |grep -v '^$' |tail -n 60 |tail -n 1)
timebefore=$(cat /zhaobsh/gcutil |grep FGCT -A 1|grep -v FGCT |awk '{print $9}' |grep -v '^$' |tail -n 60 |head -n 1)
timenow=${timenow:-0}
timebefore=${timebefore:-0}
echo $timenow
echo "如果数值为0 请重新进行获取gcutil"
gctime=$(($timenow - $timebefore))
echo "本次范围内的GC次数为:"
echo $gctime
if [ $gctime -gt 1 ]
then
echo "执行关闭服务的脚本, 并且将gc信息置空, 可以进行一下备份"
echo " " > /zhaobsh/gcutil
sleep 10
echo "重启服务"
fi
sleep 60
echo "停顿一分钟进行检查"
done