遇到疯狂GC时进行判断然后重启服务的方法-GPT学习使用之三
遇到疯狂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学习使用之三的更多相关文章
- daemon与服务(service)及重启服务的方法
简单地说,系统为了某些功能必须要提供一些服务(不论是系统本身还是网络方面),这个服务就称为service.而实现这个service的程序我们就称它为daemon.实现某个服务是需要一个daemon在后 ...
- JAVA中GC时finalize()方法是不是一定会被执行?
在回答上面问题之前,我们一定要了解JVM在进行垃圾回收时的机制,首先: 一.可达性算法 要知道对象什么时候死亡,我们需要先知道JVM的GC是如何判断对象是可以回收的.JAVA是通过可达性算法来来判断 ...
- zabbix通过curl命令判断web服务是否正常并自动重启服务
zabbix通过curl命令判断web服务是否正常并自动重启服务 主要思路: 通过curl命令获取服务器响应码,如果正常返回200,不正常返回000 具体命令: curl -I -s -w " ...
- 滚动条大于120px时,判断pc端的情况下,导航条固定定位
//滚动条大于120px时,判断pc端的情况下,导航条固定定位 $(window).scroll(function(){ var viewWidth=$(document).width() var ...
- JS垃圾回收——和其他语言一样,JavaScript 的 GC 策略也无法避免一个问题:GC 时,停止响应其他操作,这是为了安全考虑
JavaScript 内存管理 & 垃圾回收机制 标记清除 js 中最常用的垃圾回收方式就是标记清除.当变量进入环境时,例如,在函数中声明一个变量,就将这个而变量标记为“进入环境”.从逻辑上讲 ...
- MYSQL如何在创建表时添加判断条件
大家好,我是小皓. 一.背景 今天在博主练习MYS创建表操作时遇到一个语法报错,就想着来和大家分享一下MYSQL如何在创建表时添加判断条件: ERROR 1064 (42000): You have ...
- 安装.NET Framework组件时,电脑意外重启后再次安装失败
因为软件运行环境需要安装.Net Framework,我安装的是2.0sp版本,可以安装过程中计算机意外关闭,重新打开后再次安装却出现安装失败的提示,具体内容是: 产品: Microsoft .NET ...
- linux下通过脚本实现自动重启程序的方法
无论什么程序都不可能完美无缺,理论上,任何程序都有 Core Dump 的一天,正式运营的程序,尤其是服务器程序,一旦 Core Dump ,后果不堪设想,有过服务器开发经验的朋友,一定都经历过深夜美 ...
- jvm高级特性(2)(判断存活对象算法,finaliza(),方法区回收)
JVM高级特性与实践(二):对象存活判定算法(引用) 与 回收 垃圾回收器GC(Garbage Collection) 于1960年诞生在MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语 ...
- samba修改smb.conf后,不需要重启服务,就可生效
在修改完smb.conf后,不需要重启服务.在Centos7.3与Ubuntu18.04上验证都没有问题. 猜测可能的原因:samba是在客户端进行连接时,smb服务程序读取smb.conf配置文件信 ...
随机推荐
- AutomaticKeepAliveClientMixin 缓存PageView页面
一旦页面滑出屏幕它就会被销毁 ,实际项目开发中对页面进行缓存是很常见的一个需求,下面我们就看看如何使用AutomaticKeepAliveClientMixin 缓存页面. 注意:使用时一定要注意是否 ...
- 第八部分_Shell脚本之综合案例实训
综合案例 1. 实战案例1 ㈠ 具体需求 写一个脚本,将跳板机上yunwei用户的公钥推送到局域网内可以ping通的所有机器上 说明:主机和密码文件已经提供 10.1.1.1:123456 10.1. ...
- Kubernetes的拐点助推器:左手开源,右手边缘计算
摘要:KubeEdge 是首个基于 Kubernetes 扩展的,提供云边协同能力的开放式智能边缘计算平台,也是 CNCF 在智能边缘领域的首个正式项目.依托 Kubernetes 强大的容器编排和调 ...
- 华为云GaussDB圈层活动走进香港,以技术创新构筑金融政企数智发展基石
摘要:近日,华为云GaussDB圈层活动在中国·香港如期举办,活动聚集了22家香港金融政企客户和合作伙伴. 本文分享自华为云社区<华为云GaussDB圈层活动走进香港,赋能金融政企数字化转型&g ...
- 解读clickhouse存算分离在华为云实践
摘要:本文是我们对clickhouse做了最简单的支持obs的适配改造. 本文分享自华为云社区<clickhouse存算分离在华为云实践>,作者: he lifu. clickhouse是 ...
- 物联网企业该如何与华为云合作,这份FAQ值得一看
摘要:关于华为云DevRun智联生活行业加速器,梳理出伙伴和企业最关心的问题,并逐一解答. 自华为云DevRun智联生活行业加速器发布以来,一直在为产业链上下游的企业提供技术.生态建设.商业变现等资源 ...
- 插件化架构设计(3):前端可视化化平台插件架构-grafana实践
插件实践方案 其实插件你就把它当一个组件来用就好.用起来就是异步组件加载. vue异步组件加载,看官方文档:https://cn.vuejs.org/v2/guide/components-dynam ...
- 苹果商店上架流程_App上架苹果流程及注意事项
苹果商店上架流程_App上架苹果流程及注意事项 APP上架是:APP应用从提交审核到上架整个过程.目的是让应用展示在APP Store上获取流量及用户 一.IOS上架整个流程 1.申请开发者账号 2. ...
- 【网络爬虫学习】第一个Python爬虫程序 & 编码与解码详解 & Pythonの实现
本节编写一个最简单的爬虫程序,作为学习 Python 爬虫前的开胃小菜. 下面使用 Python 内置的 urllib 库获取网页的 html 信息.注意,urllib 库属于 Python 的标准库 ...
- 0x62 图论-最小生成树
A题:走廊泼水节 链接:https://ac.nowcoder.com/acm/contest/1056/A 题目描述 给定一棵N个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小 ...