记一次pod频繁重启事故分析

文章讲述了阿里云WAF防火墙的一个域名遭遇大量5xx报警,导致Pod重启。作者分析了处理过程,包括未设置资源限制、网络TCP队列、线程池饱和和Java应用的线程问题。最后讨论了如何应对高并发流量和评估Java应用最大连接数的问题。
摘要由CSDN通过智能技术生成

1.背景

某一天下午阿里云频繁打电话给到我的手机,报警内容是waf防火墙的某个域名出现大量5xx报警,我立即去阿里云ack集群查看对应域名的pod状态,发现对应的pod处于重启状态,查看日志与详细信息,发现是存活探针造成的重启。

 这是截取的日志。

2.处理方案

1.我的处理方案是第一时间重启pod,pod在running状态保持一段时间后又开始重启,紧接着业务方开始反馈接口调用不通,开始有用户投诉

2.通过日志我们可以看见是pod去调用其他服务出现超时,我们的pod是没有在资源限制上面做limites限制,所以在k8s层面不会产生oom,而且我第一时间通过监控查看节点与pod的cpu与内存使用率,并没有什么问题

3.网络层面出了问题,比如tcp队列被打满,导致请求得不到处理

4.web容器比如tomcat、jetty的线程池饱和了,这时后来的任务会堆积在线程池的队列中(需要开发配合)

5.jvm卡顿了,比如让开发闻风丧胆的fullgc+stw(需要开发配合)

3.现在一一排查

1.ss  -ntupl查看tcp队列情况,并没有堆积、溢出情况,排除网络层面问题

2.jstack查看线程情况发现一段报错日志:

org.apache.http.impl.conn.PoolingHttpClientConnectionManager$1.get(PoolingHttpClientConnectionManager.java:282

这个正是HttpClient中的连接池满了的迹象,线程在等待可用连接,最终导致jetty的线程被打满,造成服务假死,自然是不能及时响应健康检查,最终触发k8s的重启策略(开发人员分析)

3.后期通过业务部门了解发现是第三方有大量调用操作,但是并没有通知我们运维扩容pod数量,造成这次线上事故。

4.后期思考

1.k8s在应对突发高并发流量我们运维应该如何去做(如何去做好线上环境的hpa)?

2.运维应该如何去了解java应用里面有关线程池,如何在k8s中去评估一个java应用的最大连接数

3.java应用如果有线程堵塞会造成什么影响(了解多线程的具体原理)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值