Cannot assign requested address的解决办法 (nginx报错)

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

解决办法:
执行命令修改如下2个内核参数    

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

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

只有root用户才能有修改这两个参数的权限

备注: sysctl 只是临时的修改配置信息,可以直接修改 /etc/sysctl.conf 文件进行永久修改

命令格式:

sysctl [-n] [-e] -w variable=value

sysctl [-n] [-e] -p (default /etc/sysctl.conf)

sysctl [-n] [-e] -a

常用参数的意义:

-w 临时改变某个指定参数的值,如

sysctl -w net.ipv4.ip_forward=1

-a 显示所有的系统参数

-p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载

1) #echo 1 > /proc/sys/net/ipv4/ip_forward

2) #sysctl -w net.ipv4.ip_forward=1

以上两种方法都可能立即开启路由功能,但如果系统重启,或执行了

# service network restart

命令,所设置的值即会丢失,如果想永久保留配置,可以修改/etc/sysctl.conf文件

将 net.ipv4.ip_forward=0改为net.ipv4.ip_forward=1

命令格式: sysctl [-n] [-e] -w variable=value sysctl [-n] [-e] -p (default /etc/sysctl.conf) sysctl [-n] [-e] -a 常用参数的意义: -w 临时改变某个指定参数的值,如 sysctl -w net.ipv4.ip_forward=1 -a 显示所有的系统参数 -p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载 1) #echo 1 > /proc/sys/net/ipv4/ip_forward 2) #sysctl -w net.ipv4.ip_forward=1 以上两种方法都可能立即开启路由功能,但如果系统重启,或执行了 # service network restart 命令,所设置的值即会丢失,如果想永久保留配置,可以修改/etc/sysctl.conf文件 将 net.ipv4.ip_forward=0改为net.ipv4.ip_forward=1
经验分享 程序员 微信小程序 职场和发展