Linux对外连接端口数限制
2015-06-30 13:50
363 查看
这两天做压力测试,发现了一个问题,当模拟TCP client对外发起连接数达到28000左右时,开始大量抛如下异常:
java.net.BindException:Cannot assign requested address
atsun.nio.ch.Net.connect0(Native Method)
atsun.nio.ch.Net.connect(Net.java:364)
atsun.nio.ch.Net.connect(Net.java:356)
atsun.nio.ch.UnixAsynchronousSocketChannelImpl.implConnect(UnixAsynchronousSocketChannelImpl.java:326)
atsun.nio.ch.AsynchronousSocketChannelImpl.connect(AsynchronousSocketChannelImpl.java:195)
atcom.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
java.net.BindException:Cannot assign requested address
atsun.nio.ch.Net.connect0(Native Method)
atsun.nio.ch.Net.connect(Net.java:364)
atsun.nio.ch.Net.connect(Net.java:356)
atsun.nio.ch.UnixAsynchronousSocketChannelImpl.implConnect(UnixAsynchronousSocketChannelImpl.java:326)
atsun.nio.ch.AsynchronousSocketChannelImpl.connect(AsynchronousSocketChannelImpl.java:195)
atcom.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
相关文章推荐
- CentOS下LAMP环境安装配置
- 分享一个linux有趣的功能
- Linux下EPoll通信模型简析
- centos 7安装mysql5.5
- Linux服务器管理: 系统的进程管理pstree命令
- linux切换系统jdk方式
- Linux服务器管理: 系统的进程管理top命令
- Linux上free命令
- device_create,device_create_file
- Linux驱动修炼之道-RTC子系统框架与源码分析
- 红帽发力云分析,发布一系列新产品
- Linux下解压tar.xz格式压缩文件
- Linux中常用操作命令
- Linux驱动修炼之道-内存映射
- 从需求的角度去理解Linux之一:总线、设备和驱动
- CentOS下安装tar包/rpm包
- Linux驱动修炼之道-看门狗框架源码分析
- Linux 内存 buffer 和 cache 的区别
- Linux命令学习总结:reboot命令
- Linux模块化机制和module_init