今天之囧(二):Linux向外TCP最大连接只能打开28232个端口

晚上想写一个关于Echo服务器的压力测试,这一写,就出现不少问题,先是epoll的LT和EG问题,这个一会儿再说,然后改好了又遇到一个诡异的问题:在一个程序中反复用socket连接的话,到了28231左右就会莫名奇妙的断掉,提示:Cannot assign requested address,我在google,baidu搜索了这个数值半天,都没有什么结果。

终于找到了一篇文章,转载下来,感谢原作者:

http://hi.baidu.com/jabber/blog/item/da4451827697e6a20cf4d2f5.html

我比较俗,所以中间推导过程就省略了:-)

Tim的最终解决办法:因为上面有个注释说可以用 sysctl 来设置,怎么设呢,一行字

echo "net.ipv4.ip_local_port_range = 1024 65000" >> /etc/sysctl.conf; sysctl -p

搞定了,一个client可以发起65000个连接了,写程序的人每天就要面对这些意想不到的问题。

说明:以上方法在 Linux 2.6.9 上通过

2008/8/24 补充:
去除 time wait 另外一方面帮助端口使用过大问题。
# disable TIME_WAIT.. wait..
net.ipv4.tcp_tw_recycle=1

============4号码农的分割限==================

其实,上面的最后一个比较靠谱,就是快速回收端口了哈。

sudo vim /etc/sysctl.conf

末尾添加上

net.ipv4.tcp_tw_recycle=1

然后

sysctl -p

以让配置生效,OK~

Leave a Reply

Your email address will not be published.