由于多个CLOSE_WAIT
s,当现有连接总数与CLOSE_WAIT
s等于10时,新连接失败。10连接限制在哪里,如何扩展?(很难找到如何消除CLOSE_WAIT
,但这是一个不同的问题,这个问题是关于如何扩展10连接限制的。)
Ubuntu18.04内核:4.15.0-91-通用体系结构: x86_64
netstat --tcp --numeric-ports -p|grep 2225
输出
tcp 15 0 localhost:2225 localhost:42928 CLOSE_WAIT -
tcp 8 0 localhost:2225 localhost:33860 CLOSE_WAIT 10570/mdp
tcp 15 0 localhost:2225 localhost:41938 CLOSE_WAIT -
tcp 15 0 localhost:2225 localhost:42800 CLOSE_WAIT -
tcp 15 0 localhost:2225 localhost:40912 CLOSE_WAIT -
tcp 25 0 localhost:2225 localhost:33974 CLOSE_WAIT -
tcp 0 1 localhost:51842 localhost:2225 SYN_SENT 12221/telnet
tcp 15 0 localhost:2225 localhost:41808 CLOSE_WAIT -
tcp 0 0 localhost:33202 localhost:2225 ESTABLISHED 33721/controller
tcp 481 0 localhost:2225 localhost:33596 CLOSE_WAIT 10570/mdp
tcp 20 0 localhost:2225 localhost:33582 CLOSE_WAIT 10570/mdp
tcp 0 0 localhost:2225 localhost:33202 ESTABLISHED 10570/mdp
当试图连接时,我会得到“连接超时”。侦听中的待办事项设置为5.app没有(故意)限制连接。
发布于 2022-01-19 10:01:31
没有这样的限制(嗯,确实有,但是即使对于一个普通的系统来说,它也远远超过了40,000个连接限制)。
但是,是,它是限制,限制套接字积压加服务连接(在多线程服务器的情况下)。
要验证,请在二进制文件上运行strace
,并使用listen(x,y)
调用对行的输出进行grep。处于CLOSE_WAIT状态的连接可能会计入总积压,因此如果这个值太低,正常数量的CLOSE_WAIT可能会阻止服务器接受新的连接。
CLOSE_WAIT意味着客户机已经关闭了连接,但是服务器还没有释放套接字。连接到该套接字的任何线程或资源仍处于繁忙状态。通常,对于服务器来说,这是没有意义的--一旦连接被终止,进程应该尽可能快地终止。如果没有,那么这意味着在代码级别存在一些问题(而TIME_WAIT可以在内核级别进行调整)。参见,例如,这篇文章。
有时您可以减少CLOSE_WAIT逗留时间(请参阅这里),但真正的问题在于代码,应该在那里解决。
增加可以服务的连接数量还需要对服务器代码进行操作--这可能是一些简单的配置指令(如MaxConnections),甚至可能意味着架构更改。
在某些情况下,可能会将一个多路复用器(如雷迪尔 )放在服务器前面(也就是说:您在端口上运行原始程序,例如,127.0.0.1:12225,然后指示redir在0.0.0:2225上侦听连接,并将它们重定向到127.0.0.1:12225),这将“治愈”某些可能导致过多CLOSE_WAITs的连接错误。
https://unix.stackexchange.com/questions/687051
复制相似问题