晚上想写一个关于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~