记一次网络质量原因导致接口调用超时的调查过程

现象:

某个线上接口调用存在较多超时

 

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

 

posted @ 2021-04-01 16:15  剑握在手  阅读(561)  评论(0编辑  收藏  举报
返回顶部↑