案例九:9月16日通用定点应用访问报错:服务器维护升级中

一、 故障简述

故障简要描述:9月16日早上09:30开始,通用定点应用访问报错:服务器升级中,重启应用后,再次出现应用访问报错,两次不可用时间共计21分钟

网上服务市场大厅界面

在这里插入图片描述
联系单列表界面500

在这里插入图片描述
联系单创建界面

在这里插入图片描述
二、 故障处理过程

09:22 监控告警群告警:web-fixed-universal: Appservice is down,应用jvm的fullGC次数过多
09:29 凌秋反馈开发起点排查原因
09:30 客满小猫开始接到用户反馈,通用定点应用访问报错:系统生病了,程序员GG正在抢救。联系单页面报错:很抱歉,服务器维护升级中。
09:31 监控告警群告警:实例cpu使用率高
09:32 监控告警群再次告警:web-fixed-universal: Appservice is down,应用jvm的fullGC次数过多
09:33 起点开始定位排查,并在线上故障快速处理群反馈。
09:34 起点未定位到具体原因,开始操作重启应用。
09:40 应用恢复,访问正常
09:52 由于未查到故障根本原因,应用再次无法访问。
09:53 告警群告警:app web-fixed-universal dubbo接口延时过高
09:54 客满再次反馈应用访问报错。
09:55 起点开始再次操作重启应用。
10:05 应用恢复正常可以正常访问。
10:10 若谷排查反馈:应用GC时间很长
10:18 若谷操作升级应用JVM内存由2G到4G
起点,青云,阿四,若谷,徐四一起协作排查定位原因,等待晚上下班后再dump
起点于16日晚操作dump数据,尝试复现该问题,未复现。
起点于17日晚排查定位到问题原因。

三、 影响产品线及影响面

通用定点业务线的所有用户

四、 故障原因

应用jvm内存较小,参数设置不合理,且使用的是parallel gc垃圾回收机制,之前设置的内存为2G,启动参数没有设置young区和old区的大小,young区和old区比例约为1:2,但是suvivor区的大小约为10M,在进行young gc时,如果存活对象的大小超过5M,会直接进入老年代,导致老年代越来越大,必须进行fullgc才能释放内存,young gc的效果已经不太明显。

平时对pinpoint关注较少,其实这个问题之前发生过,但是时间是在晚上,如下图,9月12号晚上19:17和20:07两次fullgc的时间分别达到92秒和30秒,因为此时访问的用户较少,所以没有导致流程阻塞,9月16号早上访问的用户较多,此时fullgc会阻塞线程,导致挂起的线程越来越多,cpu占用也越来越高,因为fullgc也需要占用大量的cpu时间,进入恶性循环,最终导致服务挂起

9月12日的监控数据:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
cn.gov.zcy.fixed.center.service.admin.impl.PurchasePlanReadServiceImpl#pagingPlans有循环调用采购目录的dubbo接口,从pinpoint数据可以看出该接口的平均调用时间基本都在10秒以上,这个问题不是导致此次事故的原因

五、 故障评级
故障等级:P2
故障类别:程序问题

六、 后续ACTION:

改进措施

增加jvm内存,由2G升级到4G,9月16号上午11点若谷已执行

修改jvm默认参数,修改后的参数如下
在这里插入图片描述
目前的参数设置基本能满足线上需求,同时需要持续关注pinpoint和监控大盘中内存使用情况来逐步优化

1.采购业务全线JVM性能优化 起点 9月30日

2.排查循环调用 青松 9月30日 (依赖中台,需要提供批量接口)

3.前台大厅 屏蔽未知异常 起点 10月15日

  1. dump时候,不要触发FULLGC ,platform,片风 9月30日(自动dump堆栈信息,发送链接,待定)

5.运维保护现场,切换流量,重启,待定
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值