`
gaojingsong
  • 浏览: 1153174 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【TCP/IP的状态图解决Cannot assign requested address】

阅读更多

系统出现:Cannot assign requested address

 

网上找了下原因,大致上是由于客户端频繁的连服务器,由于每次连接都在很短的时间内结束,导致很多的TIME_WAIT,以至于用光了可用的端 口号,所以新的连接没办法绑定端口,即“Cannot assign requested address”。是客户端的问题不是服务器端的问题。通过netstat,的确看到很多TIME_WAIT状态的连接。

 

client端频繁建立连接,而端口释放较慢,导致建立新连接时无可用端口。

 

网上的解决方法:

 

执行命令修改如下2个内核参数 (需要root权限) 

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

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

 

 



 

 

 

linux内核中存在两个参数:

      net.ipv4.tcp_tw_reuse = 1表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

      net.ipv4.tcp_tw_recycle = 1表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

    在/etc/sysctl.conf文件中加入上述参数,然后执行/sbin/sysctl -p让参数生效。

    但是由于我们项目在docker中运行,并且很难单纯通过增加机器进行横向扩展。当时从网上找到了docker调整网络内核参数的方式,但是经过试验,没有效果。

  • 大小: 33.6 KB
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics