遇到疯狂GC时进行判断然后重启服务的方法-GPT学习使用之三


背景

最近怀疑产品遇到了第三方组建的bug
Groupdocs转换渲染某些文件时出现了严重的FullGC的情况
而且出现的奇怪的功效学GC
ergonomics 的提示
因为不好发现, 所以同事想通过遇到异常时自动进行重启来暂时规避这个问题. 因为这个服务仅是一个文档转换和预览, 可以不用考虑太多的数据一致性等问题
所以周末时间想着帮忙写一写

思路

利用jvm的 +XX:printgc 的配置将gc日志打印出来.
然后分析GClog, 判断最近三分钟,如果有两次ergonomics的fullGC处理就重启服务.
如果没有就继续循坏.
每十秒钟执行一次判断与循环.

脚本编写过程-1

第一步. 增加killscirpt和startscript
便于关闭和启动服务. 可以在killscript 之前增加抓取dump或者是jstack的脚本.
启动脚本里面可以增加日志的备份脚本. 第二步. 编写主脚本.分析gclog日志.循环判断full GC产生的日期.
如果是在最近几分钟内则 数据 +1 然后判断大于两次, 执行第一步的脚本. 第三步. 设置脚本启动,循环判断.

脚本编写过程-2

神通数据库的李诺帆老师推荐了edge的webtag的GPT插件
可以通过这个插件获取一些编写脚本的简单处理 效果如图示:


脚本内容

#! /bin/bash
#备注: 本脚本的用途是每20秒判断gclog内GC的次数, 如果ergonomics的gc次数在3分钟内超过2次,那么执行重启操作.
#需要严格注意本脚本的使用, 必须修改好脚本的启动脚本, 配置参数, 时间间隔等.
#必须严格进行测试, 不要随意上生产.
while true
do
interval=20
now=`date +%Y%m%d%H%M`
timeinfo=`date -d '-3 min' +%s`
#timeinfo=`date -d '-10 days' +%s`
gclogfile="/myapp/gclog.log"
gclogbackup="/myapp/gclog_${now}.log"
count=0
for num in $(for i in `cat /myapp/gclog.log |grep -i ergonomics |awk '{print $1}' |awk -F + '{print $1}'`; do echo ` date -d ${i} +%s` ; done)
do
if [ $num -gt $timeinfo ]
then
((count++))
fi
done
echo "最近周期内的ergonomics的GC次数为: $count"
if [ $count -gt 2 ]
then
scp -rp $gclogfile $gclogbackup
echo "" > $gclogfile
echo "关闭服务, 等待五秒钟重启,请自行维护脚本"
/deploy/killscript
sleep 5
echo "重启服务,请自行维护脚本"
/deploy/startscript
fi
sleep $interval
done

进行监控与处理

编写脚本为 checkgctime
然后chmod +x checkgctime
然后 nohup ./checkgctime & 进行测试验证.
注意务必要进行严格测试, 避免出现安全隐患 GPT能够帮自己使用语法, 但是很多思路还是需要自己串联
他给出的脚本,大部分都很初级, 可能无法彻底实现自己的业务场景.

遇到疯狂GC时进行判断然后重启服务的方法-GPT学习使用之三的更多相关文章

  1. daemon与服务(service)及重启服务的方法

    简单地说,系统为了某些功能必须要提供一些服务(不论是系统本身还是网络方面),这个服务就称为service.而实现这个service的程序我们就称它为daemon.实现某个服务是需要一个daemon在后 ...

  2. JAVA中GC时finalize()方法是不是一定会被执行?

    在回答上面问题之前,我们一定要了解JVM在进行垃圾回收时的机制,首先: 一.可达性算法  要知道对象什么时候死亡,我们需要先知道JVM的GC是如何判断对象是可以回收的.JAVA是通过可达性算法来来判断 ...

  3. zabbix通过curl命令判断web服务是否正常并自动重启服务

    zabbix通过curl命令判断web服务是否正常并自动重启服务 主要思路: 通过curl命令获取服务器响应码,如果正常返回200,不正常返回000 具体命令: curl -I -s -w " ...

  4. 滚动条大于120px时,判断pc端的情况下,导航条固定定位

      //滚动条大于120px时,判断pc端的情况下,导航条固定定位 $(window).scroll(function(){ var viewWidth=$(document).width() var ...

  5. JS垃圾回收——和其他语言一样,JavaScript 的 GC 策略也无法避免一个问题:GC 时,停止响应其他操作,这是为了安全考虑

    JavaScript 内存管理 & 垃圾回收机制 标记清除 js 中最常用的垃圾回收方式就是标记清除.当变量进入环境时,例如,在函数中声明一个变量,就将这个而变量标记为“进入环境”.从逻辑上讲 ...

  6. MYSQL如何在创建表时添加判断条件

    大家好,我是小皓. 一.背景 今天在博主练习MYS创建表操作时遇到一个语法报错,就想着来和大家分享一下MYSQL如何在创建表时添加判断条件: ERROR 1064 (42000): You have ...

  7. 安装.NET Framework组件时,电脑意外重启后再次安装失败

    因为软件运行环境需要安装.Net Framework,我安装的是2.0sp版本,可以安装过程中计算机意外关闭,重新打开后再次安装却出现安装失败的提示,具体内容是: 产品: Microsoft .NET ...

  8. linux下通过脚本实现自动重启程序的方法

    无论什么程序都不可能完美无缺,理论上,任何程序都有 Core Dump 的一天,正式运营的程序,尤其是服务器程序,一旦 Core Dump ,后果不堪设想,有过服务器开发经验的朋友,一定都经历过深夜美 ...

  9. jvm高级特性(2)(判断存活对象算法,finaliza(),方法区回收)

    JVM高级特性与实践(二):对象存活判定算法(引用) 与 回收 垃圾回收器GC(Garbage Collection) 于1960年诞生在MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语 ...

  10. samba修改smb.conf后,不需要重启服务,就可生效

    在修改完smb.conf后,不需要重启服务.在Centos7.3与Ubuntu18.04上验证都没有问题. 猜测可能的原因:samba是在客户端进行连接时,smb服务程序读取smb.conf配置文件信 ...

随机推荐

  1. 如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 2

    在 Part 1 中,我们一起了解了什么是 Prometheus 和 Grafana,以及使用这些工具的前提条件和优势.在本部分,将继续带您学习如何安装 Helm 以及如何使用 Prometheus ...

  2. 文心一言 VS 讯飞星火 VS chatgpt (56)-- 算法导论6.3 2题

    文心一言 VS 讯飞星火 VS chatgpt (56)-- 算法导论6.3 2题 对于 BUILD-MAX-HEAP 中第 2行的循环控制变量 i 来说,为什么我们要求它是从A.length/2到1 ...

  3. 云小课|使用SQL加密函数实现数据列的加解密

    摘要:数据加密作为有效防止未授权访问和防护数据泄露的技术,在各种信息系统中广泛使用.作为信息系统的核心,GaussDB(DWS)数仓也提供数据加密功能,包括透明加密和使用SQL函数加密. 本文分享自华 ...

  4. 艾莫尔研究院基于Karmada的落地实践

    摘要:本文从企业的业务背景.应用需求以及选择Karmada前后的对比和收益等方面,阐述了艾莫尔使用多集群技术完成企业技术升级的过程. 本文分享自华为云社区<艾莫尔研究院基于Karmada的落地实 ...

  5. PPT 常规设置

    高级设置 可以将撤销次数调大,最多 150次 默认拉到PPT中的图片是被压缩的,可以设置成不压缩(解压 PPT 可查看里面的图片大小) 字体嵌入 可将自动保存时间调短,默认保存目录我习惯先保存到桌面( ...

  6. 网页“悼念模式”全站变灰/黑白色CSS代码

    <style> html { filter:grayscale(100%); -webkit-filter:grayscale(100%); -moz-filter:grayscale(1 ...

  7. Runnable接口的 run() 方法和start()方法

    1.start()方法来启动线程,真正实现了多线程运行.这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码:通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就 ...

  8. 41. 干货系列从零用Rust编写负载均衡及代理,websocket与tcp的映射,WS与TCP互转

    wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透,后续将实现websocket代 ...

  9. 原创内容屡屡被盗?从源头对资源盗用说NO

    在这个信息化的时代,资源被盗用是一件很让人厌恶,但又很常见的事.比如,之前郭敬明的小说<梦里花落知多少>剽窃庄羽小说<圈里圈外>一事,虽然郭敬明通过个人微博向庄羽道歉,并表示& ...

  10. shell 脚本之一键部署安装 Nginx

    今天咸鱼给大家分享个源码编译安装 Nginx 的 shell 脚本 这个 shell 脚本可重复执行 完整源码放在最后 定义一个变量来存放 nginx 版本号 version=1.15.4 nginx ...