0
点赞
收藏
分享

微信扫一扫

疯狂GC的第二种处理方式-ChatGPT的学习之四

疯狂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



举报

相关推荐

0 条评论