背景
查看到nginx日志在整点整分的时候频繁出现 499,因为配置了存活检查和就绪检查,担心业务会出现大面积重建导致现网故障,所以对出现499的原因进行排查,记录下排查思路,方便以后查看。
业务链路:
负载均衡->Nginx->容器平台(nginx+php-fpm)
一、查看pod的大盘监控
CPU
内存
流量
nginx
这里发现到指标有突增突降,怀疑到可能是客户有定时执行的脚本,导致整点整分流量突然进来,但是看监控,机器的负载并不高,在预期范围内,所以准备对容器进行抓包分析,看耗时在哪里了。
二、分析包文件(Wireshark)
1、分析Nginx包文件
通过Wireshark进行过滤,找到出现499HTTP流
http.request.method == POST && ip.addr == 9.139.39.234 && http contains "386406"
可以看到握手和挥手都正常,主要我们来看一下第3、4、5、6条记录
- 第3条记录是握手成功,已经建立连接了 length=68;
- 第4条client 发送POST请求,length = 663;
- 第5条记录是server应答,ack = 596(663-68+1)
- 第6条记录直接就是客户端发送FIN包了,而且看时间正好是5秒后;
从这里就可以判断出其实是我们业务的问题了,因为这里分析的是nginx的,nginx还会往后转发到php进行处理,下面把php的包拿出来分析下。
2、分析php包文件
通过Wireshark进行过滤,找到php的包
tcp.port == 9071 && frame contains "386406"
从这里确认到确实是php应答后并没有回包给nginx,所以导致客户端接收超时,断开连接,出现499,通过这些记录找到了php日志
3、原因定位
发现与db交互消耗了大量的时间,再加上php处理进程设置的最大192个,所以突然大量请求过来后,php处理不过来,就导致了这个问题,这里要解决的话,可能需要拉研发看能不能优化下业务逻辑。