从服务端分析,以下情况会导致服务地址连接访问超时:
1. 服务地址被安全防护如流量黑洞和清洗,WAF防护(WAF的特点是建连后向客户端和服务器集群双向发送RST报文)。
2.客户端端口不足尤其容易发生在压测的时候,客户端端口不足会导致建立连接失败,负载均衡默认会抹除TCP连接的timestamp属性,Linux协议栈的tw_reuse(time_wait状态连接复用)无法生效,time_wait状态连接堆积导致客户端端口不足。解决方法:客户端使用长连接代替短连接。使用RST报文断开连接(socket设置SO_LINGER属性) ,而不是发FIN包这种方式断开。
3.后端服务器accept队列满后端服务器accept队列满,导致后端服务器不回复syn_ack报文,客户端超时。解决方法:默认的net.core.somaxconn的值为128,执行sysctl -w net.core.somaxconn=1024更改它的值,并重启后端服务器上的应用。
4.从四层负载均衡后端服务器访问该四层负载均衡的服务地址四层负载均衡,在该负载均衡的后端服务器上去访问该负载均衡的服务地址会导致连接失败,常见的场景是后端应用使用URL拼接的方式跳转访问。
5.对连接超时的RST处理不当负载均衡上建立TCP连接后,如果900秒未活动,则会向客户端和服务器双向发送RST断开连接,有的应用对RST异常处理不当,可能会对已关闭的连接再次发送数据导致应用超时。