我正在使用像这样的Hello world示例 -
var sys = require("sys"),
my_http = require("http");
my_http.createServer(function(request,response){
response.writeHeader(200, {"Content-Type": "text/plain"});
response.writeHeader(200,{"Connection":"Keep-Alive"});
response.write("Hello World");
response.end();
}).listen(8080);
sys.puts("Server Running on 8080");
在客户端,我使用ab如下 - (使用5k并发连接总共100000个请求)
ab -n 100000 -c 5000 http://192.168.0.99:8080/
当我netstat -antp | grep 8080 | grep ESTABLISHED |wc -l
时,我只获得200到300之间的值。在服务器端,同一命令只显示10-20个并发连接。
首先,为什么两个数字有差异?两者不应该相同吗?
其次,为什么我没有看到1000个ESTABLISHED连接?
服务器端配置 - http://pastebin.com/Cc77YQp7
客户端配置 - http://pastebin.com/4pV16TuD
正如你所看到的,我已经将TIME_WAIT设置为1秒后过期,并且在谷歌搜索后也优化了其他参数(增加ulimit等),但我找不到这两个问题的根本原因。
事实上,很多次我在客户端(在ab工具中)得到错误 - apr_socket_recv: Connection timed out (110)
客户端在Ubuntu 12 LTS上运行,Node.JS在Debian stable上运行(wheezy)
答案 0 :(得分:0)
您可能需要增加套接字池的值。尝试:
my_http.globalAgent.maxSockets = Infinity //或一些合理的数字......