我有一个使用大量连接的网站和应用程序。它通常有大约3,000个静态打开的连接,并且可以在几秒钟的时间内接收5,000到50,000次连接尝试。
由于TIME_WAIT状态套接字,我遇到了耗尽本地端口以打开新连接的问题。即使将tcp_fin_timeout设置为较低的值(1-5),这似乎只会导致过多的开销/减速,并且它仍然偶尔会无法打开新的套接字。
我已经查看了tcp_tw_reuse和tcp_tw_recycle,但我不确定这些中哪一个是首选,或者如果同时使用这两个选项。
答案 0 :(得分:53)
根据Linux documentation,您应该使用TCP_TW_REUSE标志允许重新使用TIME_WAIT状态的套接字进行新连接。
在处理必须处理TIME_WAIT状态下的许多短TCP连接的Web服务器时,这似乎是一个不错的选择。
正如here所述,TCP_TW_RECYCLE在使用负载均衡器时可能会出现一些问题......
编辑(添加一些警告;)):
@raittes在评论中提到,“使用负载均衡器时的问题”是关于面向公众的服务器。启用回收后,服务器无法区分同一NAT设备后面的不同客户端的新传入连接。答案 1 :(得分:11)
注意:.modal-opened{
opacity: 1 !important;
}
来自Linux4.12的 removed 。
消息来源:https://vincent.bernat.im/en/blog/2014-tcp-time-wait-state-linux
答案 2 :(得分:0)
pevik在描述所有可用选项时提到了interesting blog post going额外的路程。
必须将修改内核选项视为最后手段,除非您知道自己在做什么,否则通常应避免这样做。如果是那样的话,您就不需要在这里寻求帮助。因此,我建议不要这样做。
我可以提供的最合适的建议是指出描述网络连接的部分:四元组(var newArr = data.filter((x, index, self) =>
index === self.findIndex((t) => (
t.CUSTOMER_PERMANENT_ID === x.CUSTOMER_PERMANENT_ID)));
console.log(newArr);
,client address
,client port
,server address
)
如果您可以增大可用端口池,则可以接受更多并发连接: