我在Debian 7 x64上运行节点v0.12.7,我想在具有4GB内存的16核虚拟专用服务器上对其性能进行基准测试。
我正在运行以下简约代码:
// server.js
var http = require('http');
http.createServer(function (request, response) {
res.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World');
}).listen(80,"0.0.0.0");
我在另一个终端中使用此命令启动它:
node server.js
此时节点正在一个核心上运行。然后我使用ab来用这个命令测试它的性能:
ab -n 10000 -c 100 -k http://127.0.0.1/
...并获得以下结果:
...
Requests per second: 3925.81 [#/sec] (mean)
...
Percentage of the requests served within a certain time (ms)
50% 35
...
我想知道你是否有人做过类似的测试,如果你:
我不得不提一下,在群集模式下使用pm2运行它有15个内核,这让我有4500个请求/秒,这让我觉得我错过了另一个瓶颈。
感谢您对此主题的任何想法。 保罗
答案 0 :(得分:2)
发布我的结果(希望它可以让其他人受益):
在MacBook Pro 2.2 GHz,Core I7,16 GB上。使用JMeter完成测试。在处理15K要求后,ab冻结并抛出一些错误。
用户数:200 每个用户发出5000个请求。
结果:没有节点群集:
Total Samples Processed: 1000000
Throughput: 22419 req/sec
Total Time: 44 seconds
结果:使用群集 - 8个节点(= numCpus)
Total Samples Processed: 1000000
Throughput: 36091 req/sec
Total Time: 27 seconds
结果:使用群集 - 6个节点(总cpus的3:1)
Total Samples Processed: 1000000
Throughput: 36685 req/sec
Total Time: 27 seconds
结果:使用群集 - 4个节点(= numCpus / 2)
Total Samples Processed: 1000000
Throughput: 35604 req/sec
Total Time: 28 seconds
真的很棒。对于具有4/6/8节点的群集,性能几乎相同。
服务器代码如下。
"use strict";
var http = require('http');
const PORT = 8080;
var total = 0;
var server = http.createServer(function(request, response) {
total++;
if ((total % 1000) === 0) {
console.log("Completed:" + total);
}
response.end('It Works!! Path Hit: ' + request.url);
});
server.listen(PORT, function() {
console.log("Server listening on: http://localhost:%s", PORT);
});
以下代码用于群集。
"use strict";
const cluster = require('cluster');
const numCPUs = require('os').cpus().length;
var http = require('http');
const PORT = 8080;
var total = 0;
//numCPUs = 6;
//numCPUs = 4
console.log("Number of CPUs" + numCPUs);
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
}
else {
var server = http.createServer(function(request, response) {
total++;
if ((total % 1000) === 0) {
console.log("Completed:" + total);
}
response.end('It Works!! Path Hit: ' + request.url);
});
server.listen(PORT, function() {
console.log("Server listening on: http://localhost:%s", PORT);
});
}
答案 1 :(得分:0)
我不确定这个问题的重点,而是对MacBook Pro进行快速测试,配备16GB RAM和Node 5.0.0
Requests per second: 6839.72 [#/sec] (mean)
Time per request: 14.620 [ms] (mean)
Percentage of the requests served within a certain time (ms)
50% 14