nodejs每秒请求和并发呼叫

我正在Debian 7 x64上运行node v0.12.7,我想用4GB内存在16核心虚拟专用服务器上进行基准testing。

我正在运行以下简约代码:

// 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"); 

我在另一个terminal使用这个命令启动它):

 node server.js 

此时节点正在一个核心上运行。 然后我用ab命令testing它的性能:

 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 ... 

我想知道你们中是否有人做过类似的testing,如果你:

  • 得到更好的结果
  • 得到同样的结果,但能够调整您的节点应用程序/服务器,以获得更高的请求/秒和/或更低的延迟。

我不得不提及,使用15核心的集群模式运行pm2会带来4500个请求/秒,这让我觉得在另一个瓶颈处我想念另一个瓶颈。

感谢您对此主题的任何想法。 保罗

发布我的结果(希望可以使其他人受益):

在MacBook Pro 2.2 GHz,Core I7,16 GB。 testing使用JMeter完成。 ab在处理15K请求之后被冻结并抛出一些错误。

用户数量: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); }); } 

我不是很确定这个问题的重点,但在MacBook Pro上的快速testing,有16GB的RAM和节点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