宽带出现服务器响应超时,客户端请求服务端莫名出现超时

背景:

客户端请求服务端域名,进行查询操作,偶尔出现200ms+延迟,且对于该请求服务端执行速度4ms左右,此问题非常诡异,决定对此进行研究. 下面记录下当时详细的定位&解决流程

问题定位:

1、分析代码

服务端系统是一个常见的spring-boot web工程,使用了集成的tomcat。分析了代码之后,发现并没有特殊的地方,没有特殊的过滤器或者拦截器,所以初步排除业务代码问题.

2、确定调用链路

宽带出现服务器响应超时,客户端请求服务端莫名出现超时_第1张图片

3、问题排查分析

3.1、网络层问题,抓包 (20210701)

确定耗时位置是 客户端调用F5,还是 F5 调用 服务端 ?

3.1.1 服务端ack出现大量 RST

宽带出现服务器响应超时,客户端请求服务端莫名出现超时_第2张图片

通过跟踪RST的HTTP 流 发现:在FIN最后一次关闭之后 , 服务端向客户端发送了 FIN 关闭连接的请求,然后服务端又向客户端发了报文导致RST. 抓包如下:

宽带出现服务器响应超时,客户端请求服务端莫名出现超时_第3张图片

怀疑是连接不能复用导致的建联耗时,经排查代码发现,客户端未使用连接池,因此 客户端增加HTTP 连接池来解决此类问题 .

3.1.2 网络耗时长,抓包

经过2.1.1 的优化之后,还是存在调用超时的现象,现在我们通过wireshark 抓包观察,发现客户端与F5之间无超时情况,客户端发出请求后,随机收到了F5的ACK;F5 发出请求后,间隔40ms 收到服务端的ack , 此处就引出了另外一个问题,就是 TCP 神奇的40 ms (https://cloud.tencent.com/dev... 大家可以自行去备注的链接去研读,这里篇幅时间有限,不在进行赘述 .

3.2、网络层无波动,考虑应用层

开始考虑服务端 socket 连接 和 服务端容器方向

3.2.1. 服务器socket连接

跳过F5 负载,直接使用IP:port 的方式请求服务端(20210713)

20210714 观察日志:

你可能感兴趣的:(宽带出现服务器响应超时)