简单的Node.js服务器无法处理几百个并发请求

时间:2013-11-07 02:45:30

标签: performance node.js sockets network-programming

我正在使用像这样的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)

1 个答案:

答案 0 :(得分:0)

您可能需要增加套接字池的值。尝试:

my_http.globalAgent.maxSockets = Infinity //或一些合理的数字......