机器- linux,3.10.19内核
这是在一个大型分布式系统中,有几个服务器和客户机(在相同的和不同的节点/机器上)彼此有TCP连接。
测试用例:
客户端程序节点/机器被关闭(出于目的,测试用例),而服务器了解其断开的唯一途径是通过保持活动计时器(空闲time=40秒,4个探针,探测time=10秒)。
好案例:
在大多数情况下,这都很好,服务器知道客户机在40,70秒内就坏了。
坏案例:
但是,我遇到了另一种独特的情况,即在保持活动计时器运行时,服务器尝试向客户端发送一些数据,然后启动TCP重传定时器,该定时器覆盖/杀死了保持活动计时器。重传计时器需要15分钟才能检测到另一端已经不在了。
15分钟对于服务器来说是实现这一点的一段时间。我正在寻找其他人如何处理这种情况的方法。我需要调整我的重传计时器值吗?
谢谢!
发布于 2015-11-07 01:33:20
有一个完全独立的配置来重新传输超时。
来自Linux的tcp.7手册页
tcp_retries2 (整数;默认值: 15;自Linux2.2以来) 在放弃之前,TCP数据包在既定状态下被重新传输的最大次数。默认值为15,这对应于大约13到30分钟的持续时间,这取决于重传超时。RFC 1122规定的100秒的最小限制通常被认为太短了。
这很可能是您想要调整的值,以更改检测连接是否消失所需的时间。
发布于 2017-12-21 07:51:32
linux内核版本4.3.0-1-AMD 64也有同样的问题:
- When no message is sent between the cable disconnection and the socket disconnection (by the tcp keep-alive mecanism).
- When the cable is disconnected between the client/server and the switch (which sets the link state to down) even if the client/server application tries to send a message.
https://stackoverflow.com/questions/33553410
复制相似问题