Pau*_*aul 4 performance benchmarking node.js
我在 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");
Run Code Online (Sandbox Code Playgroud)
我在另一个终端中使用此命令启动它):
node server.js
Run Code Online (Sandbox Code Playgroud)
此时节点正在一个核心上运行。然后我使用 ab 通过以下命令测试其性能:
ab -n 10000 -c 100 -k http://127.0.0.1/
Run Code Online (Sandbox Code Playgroud)
...并得到这些结果:
...
Requests per second: 3925.81 [#/sec] (mean)
...
Percentage of the requests served within a certain time (ms)
50% 35
...
Run Code Online (Sandbox Code Playgroud)
我想知道你们中是否有人做过类似的测试,并且您是否:
我必须提到的是,在具有 15 个核心的集群模式下使用 pm2 运行它使我达到每秒 4500 个请求,这让我认为在某个地方还有另一个我错过的瓶颈。
感谢您对此主题的任何想法。保罗
发布我的结果(希望对其他人有用):
在 MacBook Pro 2.2 GHz、酷睿 I7、16 GB 上。测试是使用JMeter完成的。ab 在处理 15K 请求后冻结并抛出一些错误。
用户数量:200 每个用户发出 5000 个请求。
结果:没有节点集群:
Total Samples Processed: 1000000
Throughput: 22419 req/sec
Total Time: 44 seconds
Run Code Online (Sandbox Code Playgroud)
结果:使用集群 - 8 个节点 (=numCpus)
Total Samples Processed: 1000000
Throughput: 36091 req/sec
Total Time: 27 seconds
Run Code Online (Sandbox Code Playgroud)
结果:使用集群 - 6 个节点(CPU 总数的 3:1)
Total Samples Processed: 1000000
Throughput: 36685 req/sec
Total Time: 27 seconds
Run Code Online (Sandbox Code Playgroud)
结果:使用集群 - 4 个节点 (=numCpus/2)
Total Samples Processed: 1000000
Throughput: 35604 req/sec
Total Time: 28 seconds
Run Code Online (Sandbox Code Playgroud)
真的很棒。对于 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);
});
Run Code Online (Sandbox Code Playgroud)
以下代码用于聚类。
"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);
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7552 次 |
| 最近记录: |