Linux单机连接发起28232个连接

在Linux单机压力测试4万个TCP连接,发现了一个问题,当模拟对外发起连接数达到28172左右时,开始大量抛如下异常:
    java.net.BindException: Cannot assign requested address
    at sun.nio.ch.Net.connect0(Native Method)
    at sun.nio.ch.Net.connect(Net.java:364)
    at sun.nio.ch.Net.connect(Net.java:356)
    at sun.nio.ch.UnixAsynchronousSocketCh annelImpl.implConnect(UnixAsynchronousSocketCh annelImpl.java:326)
    at sun.nio.ch.AsynchronousSocketChanne lImpl.connect(AsynchronousSocketChanne lImpl.java:195)
    at com.aliyun.talk.mon.stack.comm.AsyncConnection.connect(AsyncConnection.java:85)
    研究发现,Linux对外的随机分配端口是由一定限制的,理论上单机对外的端口最大值为65535,除去一些保留端口和被占用端口外,也应该在6W左右,但实际上单机建立对外连接时,默认不超过28232个连接。
    执行以下命令就很清楚原因了:
      $ cat / proc / sys / net / ipv4 / ip_local_port_range
输出结果为:
    32768   61000
    这就是Linux随机分配端口的范围,如果在该范围内有被占用的端口,那么连接数肯定小于28232.如果想更改这个范围,可以执行以下命令:
    # echo "10000 65535" > /proc/sys/net/ipv4/ip_local_port_range


补充:
 
服务器最大连接数配置

LInux:

2.1.4.修改网络最大连接数
l文件数限制修改
1)vi /etc/security/limits.conf
在末尾追加:
* soft nofile 50000
* hard nofile 50000


2)vi /etc/pam.d/login
在末尾追加:
session required /lib/security/pam_limits.so


l网络端口限制修改
vi /etc/sysctl.conf
在末尾追加:
net.nf_conntrack_max=6553600






windows:

需要修改最大tcp连接数:
> - 修改注册表:
>  [HKEY_LOCAL_MACHINE /System /CurrentControlSet /Services /Tcpip /Parameters]
> - 添加如下配置项:
>  - MaxUserPort = 65534 (Decimal)
>  - MaxHashTableSize = 65536 (Decimal)
>  - MaxFreeTcbs = 16000 (Decimal)
> - 修改完注册表后,需要重启 Windows 才能生效。

你可能感兴趣的:(Linux单机连接发起28232个连接)