很多TIME_WAIT连接解决

来源:互联网 发布:ubuntu 安装apache2 编辑:程序博客网 时间:2024/04/28 23:03

发现很多TIME_WAIT连接,但是进程fd正常,connect 返回-1时候errno==99 Cannot assign requested address的解决办法

今天多进程导数据时候,遇到一个问题,现象是 多进程跑一会,所有进程开始connect 返回-1  同时errno==99 Cannot assign requested address。看每一个进程的fd是正常的 各种方法检测到,确认没有fg泄露迹象!但是netstat时候发现大量的TIME_WAIT连接,端口被占完了,是导致connect 返回-1  同时errno==99 Cannot assign requested address的原因。

 

网络搜索得到一个解释:客户端频繁的连服务器,由于每次连接都在很短的时间内结束,导致很多的TIME_WAIT,以至于用光了可用的端口号,所以新的连接没办法绑定端口,即“Cannot assign requested address”

其实书上看过 close时候只是把fd的使用数-1,但是还没有回收链接,这时候需要修改系统参数,快速回收使用数已经为0 的链接(即正常close的df)。

 

解决办法:

sysctl -w net.ipv4.tcp_tw_recycle=1  表示开启TCP连接中TIME-WAIT sockets的快速回收

执行此命令后  茫茫多的进程终于正常了...

 

(还有一个 sysctl -w net.ipv4.tcp_timestamps=1  开启对于TCP时间戳的支持,若该项设置为0,则下面一项设置不起作用)