很多TIME_WAIT连接解决

发现很多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,则下面一项设置不起作用)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值