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

Mic*_*see 52 linux networking tcp

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

由于TIME_WAIT状态套接字,我遇到了耗尽本地端口以打开新连接的问题.即使将tcp_fin_timeout设置为较低的值(1-5),这似乎只会导致过多的开销/减速,并且它仍然偶尔会无法打开新的套接字.

我已经查看了tcp_tw_reuse和tcp_tw_recycle,但我不确定这些中哪一个是首选,或者如果同时使用这两个选项.

Céd*_*ien 57

根据Linux文档,您应该使用TCP_TW_REUSE标志来允许在TIME_WAIT状态下重新使用套接字来进行新连接.

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

如上所述这里,该TCP_TW_RECYCLE可以使用负载均衡器时,会导致一些问题...

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

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

  • "使用负载平衡器时的问题"是关于面向公众的服务器.启用回收后,服务器无法区分同一NAT设备后面的不同客户端的新传入连接. (6认同)

pev*_*vik 18

注:net.ipv4.tcp_tw_recycle删除从Linux的4.12.

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