美文网首页
解决Cannot assign requested addres

解决Cannot assign requested addres

作者: _Irving | 来源:发表于2023-01-11 15:09 被阅读0次

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

    1. 使用如下两种方式查看(如下是修改后的,原来是32768 61000,此时只能27000多端口,当超出后就会报错)
    [xxx@yahf ~]$ sysctl -a |grep local_port_range
    net.ipv4.ip_local_port_range = 9000 65500
    [xxx@yahf ~]$ cat /proc/sys/net/ipv4/ip_local_port_range
    9000    65500
    
    1. 修改:vi /etc/sysctl.conf 添加下面一行:net.ipv4.ip_local_port_range=10000 65000

    vi:Esc返回到命令行模式,【i】键进入编辑模式,添加好后保存退出,命令行如下借鉴:
    【:w】 保存文件
    【:w!】 若文件为只读,强制保存文件
    【:q】 离开vi
    【:q!】 不保存强制离开vi
    【:wq】 保存后离开
    【:wq!】 强制保存后离开

    [xxx@yahf etc]$ vi /etc/sysctl.conf
    
    # sysctl settings are defined through files in
    # /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
    #
    net.ipv4.ip_local_port_range=10000 65000    #添加这一行
    # Vendors settings live in /usr/lib/sysctl.d/.
    # To override a whole file, create a new file with the same in
    # /etc/sysctl.d/ and put new settings there. To override
    # only specific settings, add a file with a lexically later
    # name in /etc/sysctl.d/ and put new settings there.
    #
    # For more information, see sysctl.conf(5) and sysctl.d(5).
    
    1. 修改好后,执行命令“sysctl -p”使参数生效,不需要reboot。
    2. 其他可能的解决办法:
    • 调低端口释放后的等待时间,默认为60s,修改为15~30s
    [xxx@localhost ~]$ sys -w net.ipv4.tcp_fin_timeout=30
    
    • 修改tcp/ip协议配置,通过配置/proc/sys/net/ipv4/tcp_tw_resue,默认为0,修改为1.释放TIME_WAIT端口给新连接使用
    [xxx@localhost ~]$ sysctl -w net.ipv4.tcp_timestamps=1
    
    • 修改tcp/ip协议配置,快速回收socket资源,默认为0,修改为1
    [xxx@localhost ~]$ sysctl -w net.ipv4.tcp_tw_recycle=1
    

    相关文章

      网友评论

          本文标题:解决Cannot assign requested addres

          本文链接:https://www.haomeiwen.com/subject/bvwbcdtx.html