增加 node.js http 服务器的吞吐量

Increase throughput of node.js http server

我正在试验 node.js,但遇到了一个奇怪的吞吐量问题。基本上,我有这段代码可以创建一个简单的 HTTP 服务器(在具有 4GB RAM 和 4 个 vCPU 的虚拟机上,运行 Ubuntu 16.04 和 node.js v6.3.1):

const http = require('http');
http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello');
}).listen(8888);

我 运行 使用 node server.js 启动 HTTP 服务器,然后我尝试使用 Apache Bench 从另一台机器对其进行负载测试:

ab -l -r -n 100 -c 50 -k http://server-ip:8888/

但是,无论我测试的请求数量和并发性(n/c 值)如何,基准测试结果始终显示 'requests per second' 低于 5/秒,这太低了对于像 node.js 这样的可扩展框架和上面的简单 HTTP 服务器。

所以我假设它与配置、设置等有关。有人对如何在这种情况下增加吞吐量有任何想法吗?!

更新: 我遇到过在云 VM 上使用几乎相同的基本代码 运行 获得高吞吐量的人:

http://zgadzaj.com/benchmarking-nodejs-basic-performance-tests-against-apache-php

https://www.jayway.com/2015/04/13/600k-concurrent-websocket-connections-on-aws-using-node-js/

http://blog.yld.io/2016/02/08/squeeze-the-juice-out-of-node/

http://blog.caustik.com/2012/08/19/node-js-w1m-concurrent-connections/

问题是 Windows8.1(我第一次尝试的负载测试机器)限制了 tcp 连接,因此影响了 Apache Bench (ab) 并发性。在不同的 Ubuntu 机器上,它工作正常并且吞吐量结果要好得多。

总是尝试确认错误不是由外部变量引起的,总是从最远的地方到最近的地方。并注意您不能 运行 在与测试的服务器相同的机器上进行基准测试,因为如果不是在软件方面,您的基准测试工具资源将与被测试的服务器相加,至少在硬件方面是肯定的。即使有虚拟化。

祝 NodeJS 好运!