繁忙服务器的推荐 TCP 保持连接设置

繁忙服务器的推荐 TCP 保持连接设置

我们在 Debian 服务器上遇到了一些网络超时问题,该服务器非常繁忙,并且与网络上的许多其他服务器保持多个连接。

以下是 sysctl.conf 中当前的 TCP keepalive 设置:

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

或许这些都有问题。

对于繁忙的服务器,建议使用哪些保持活动设置?

答案1

因此 tcp keepalive 与 nginx/apache keepalive 之类的不同。

tcp keepalive 会在发生错误时保持连接打开。例如,客户端没有收到请求,因此它可以通过同一连接重新尝试。现在这种情况很少发生,一般的经验法则是您希望在 NAT 服务器上保持较高的 tcp keepalive,这样它就不会丢失从客户端到其后面的 NATed 服务器的映射。我们运行的 Ad 服务器每天处理数百万个连接,每个服务器大约 4000 万个连接,我们的 keepalive 如下所示

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

我仍然觉得 5 秒的保持活动时间太长了,考虑到我们业务的性质,如果我们在 50 毫秒内没有返回广告,客户端就会超时。所以我可能会将其降至 1。我一直在慢慢降低该值,这样就不会造成任何重大问题。我不建议这样做,因为所有用例都不同。

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

如果您没有用完 tcp 端口,那么更改 tcp keepalive 可能不会改变您看到的任何超时情况。

答案2

您遇到了哪种网络超时?如果服务器太忙而无法及时响应,TCP 保持活动状态将无济于事。它仅有助于检测 TCP 连接何时不再活动,因为对等方崩溃或由于连接不活动而导致某些数据包过滤器处于关闭状态之间。

相关内容