tcp_tw_reuse vs tcp_tw_recycle:要使用哪一个(或两者)?

我有一个网站和应用程序使用大量的连接。 它通常有大约3000个连接静态打开,并且可以在几秒钟的时间内从任何地方接收5,000到50,000次连接尝试。

由于TIME_WAIT状态套接字,我有本地端口用尽打开新连接的问题。 即使tcp_fin_timeout设置为低值(1-5),这似乎只是造成了太多的开销/减速,它仍然有时不能打开一个新的套接字。

我已经看了tcp_tw_reuse和tcp_tw_recycle,但是我不确定哪个是最好的select,或者是否使用它们是一个选项。

根据Linux文档 ,您应该使用TCP_TW_REUSE标志来允许重新使用TIME_WAIT状态的套接字用于新的连接。

在处理一个必须处理许多处于TIME_WAIT状态的短TCP连接的Web服务器时,这似乎是一个不错的select。

如此处所述,使用负载平衡器时,TCP_TW_RECYCLE可能会导致一些问题…

编辑(添加一些警告;)):

正如@raittes在评论中提到的那样,“使用负载平衡器时的问题”是关于面向公众的服务器。 启用回收时,服务器无法区分来自同一NAT设备后面的不同客户端的新传入连接。

注意: net.ipv4.tcp_tw_recycle已从Linux 4.12中删除

消息来源: https : //vincent.bernat.im/en/blog/2014-tcp-time-wait-state-linux