为繁忙的服务器推荐的TCP保持活动设置

我们在一个相当繁忙的Debian服务器上遇到了一些networking超时问题,并且维护了到networking上其他许多服务器的多个连接。

这是我们目前在sysctl.conf中的TCP keepalive设置:

net.ipv4.tcp_keepalive_time=60 net.ipv4.tcp_keepalive_intvl=90 net.ipv4.tcp_keepalive_probes=3 

也许这是一个问题。

对于繁忙的服务器,build议使用哪些Keepalive设置?

你有什么样的networking超时? 如果服务器忙于及时响应,TCP保持活跃状态​​将无济于事。 它只会帮助检测TCP连接何时不再活动,因为连接不活动,对方崩溃或某些数据包filter处于closures状态。

所以tcp keepalive是不同的,然后像nginx / apache keepalive。

tcp keepalive保持连接打开,以防发生错误。 就像客户端没有得到请求,所以它可以重新尝试通过相同的连接。 现在很less发生,一般的经验法则是你想在NAT服务器上保持高TCP keepalive,所以它不会丢失客户端到NAT服务器之间的映射。 我们运行的广告服务器每天在每台服务器上以每天大约4000万个连接接收数百万的数据,而我们的Keepalive看起来像

 "net.ipv4.tcp_keepalive_intvl" => 2, "net.ipv4.tcp_keepalive_probes" => 3, "net.ipv4.tcp_keepalive_time" => 5, 

我仍然觉得Keepalive时间太长了5秒,并且考虑到我们的业务性质,如果我们不在50ms内返回广告,那么客户端超时。 所以我可能会把它降到1.我刚刚降低了这个值,所以我不会引起任何重大的问题。 我不推荐相同,因为所有用例都不一样。

所以正如我所说的那样nginx / apache keepalive是非常不同的。 这是更持久的连接。 所以它可以连接一次,并重新使用该连接。 这将有助于减less客户端和主机之间的延迟。

有机会,如果你没有用完TCP端口,那么改变你的tcp keepalive不会改变任何你看到超时。