1

我正在使用这样的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 如下(总共 100000 个请求使用 5k 个并发连接)

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 等),但我找不到这两个问题的根本原因。

事实上,很多时候我apr_socket_recv: Connection timed out (110)在客户端(在 ab 工具中)遇到错误

客户端在 Ubuntu 12 LTS 上运行,Node.JS 在 Debian 稳定版上运行(喘不过气来)

4

1 回答 1

0

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

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

于 2013-11-07T04:56:34.080 回答