增加 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 好运!
我正在试验 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 好运!