记一次网络质量原因导致接口调用超时的调查过程
现象:
某个线上接口调用存在较多超时
1、进一步分析排查现象:
通过外网压测一个HTTP接口,当报文内容较大时,有较多请求出现超时
通过内网压测则没有该情况
2、打开http报文记录到日志功能
发现部分报文的content-length比实际body长,并且正常body应该是个json串,问题报文的body是一个不完整的json串(没有 "}" )
引发问题:
A、为什么content-length比实际body长会导致超时
B、为什么body json串不完整
对于问题A:
通过阅读源码发现,由于content-length比实际body长,服务端程序阻塞在读RequestBody相关代码处,而且请求是keep-alive请求,继而超时
对于问题B:
通过抓包发现,当一个报文较长时,被分成了很多帧发出,部分帧发送失败,重发又晚于服务端程序规定的超时时间,会导致超时
解决方案:换网络质量好云服务运营商 | 减小报文大小尽量控制在一帧内(去掉协议头大约1460个字节)| 减小MTU