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

标签 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 | 8080 | grep 8080 grep ESTABLISHED |wc -l 我只得到200到300之间的值。在服务器端,相同的命令仅显示10-20个并发连接。

首先,为什么两个数字存在差异?两者不应该是一样的吗?

其次,为什么我没有看到 1000 个 ESTABLISHED 连接?

服务器端配置-http://pastebin.com/Cc77YQp7

客户端配置 - http://pastebin.com/4pV16TuD

如您所见,我已将 TIME_WAIT 设置为 1 秒后过期,并在 Google 后优化了其他参数(增加 ulimit 等),但我找不到这两个问题的根本原因。

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

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

最佳答案

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

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

关于performance - 简单的 Node.js 服务器无法处理数百个并发请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19827060/

相关文章:

MySQL 查询需要 5 分钟才能执行

c# - 是否锁定性能克隆对象

json - 如何使用 Express 或 Body-Parser 拒绝无效的 JSON 正文

c# - Socket c# 通过互联网聊天?

python - Django 模型 : Keep track of activity through related models?

node.js - 更新到 npm 5.4.0 后 npm 损坏

c# - 异步 IO 在 Windows 上真正归结为什么(例如 NodeJS、EventMachine 等)?

c - 字节泛洪密码学问题(C 库)

c - 一个套接字多个线程

performance - 在 Racket 中查找特定数量的素数