环境:
问题描述:
采用单进程、多进程、pm2 cluster方案分别测试node同一功能程序。 为什么pm2 cluster方案的吞吐量反而小于单进程的吞吐量? 测试结果: 单进程吞吐量:473.5 多进程吞吐量:749.21 pm2 cluster吞吐量:207.74
单进程方案
single.js
var http = require('http');
var server = http.createServer(function(req, res){
res.writeHead(200, {'Content-Type': 'text/plain'});
for(var i = 0; i < 10; i++){
for(var j=0; j<10; j++){
console.log('.');
}
}
res.end('handled by child, pid is ' + process.pid + '\n');
});
server.listen(1337);
在终端1中执行:node single.js 在终端2中执行:ab -n 10000 -c 500 -k http://127.0.0.1:1337/采用测试工具ab,-n 10000表示请求总数为10000, -c 500表示并发用户数为500 测试结果如下图:
多进程方案
parent.js
var cp = require('child_process');
var child1 = cp.fork('child.js');
var child2 = cp.fork('child.js');
var server = require('net').createServer();
server.listen(1337, function(){
child1.send('server', server);
child2.send('server', server);
server.close();
});
child.js
var http = require('http');
var server = http.createServer(function(req, res){
res.writeHead(200, {'Content-Type': 'text/plain'});
for(var i = 0; i < 10; i++){
for(var j=0; j<10; j++){
console.log('.');
}
}
res.end('handled by child, pid is ' + process.pid + '\n');
});
process.on('message', function(m, tcp){
if(m === 'server'){
tcp.on('connection', function(socket){
server.emit('connection', socket);
})
}
})
在终端1中执行:node parent.js 在终端2中执行:ab -n 10000 -c 500 -k http://127.0.0.1:1337/采用测试工具ab,-n 10000表示请求总数为10000, -c 500表示并发用户数为500 测试结果如下图:
pm2 cluster方案
cluster.js
var http = require('http');
var server = http.createServer(function(req, res){
res.writeHead(200, {'Content-Type': 'text/plain'});
for(var i = 0; i < 10; i++){
for(var j=0; j<10; j++){
console.log('.');
}
}
res.end('handled by child, pid is ' + process.pid + '\n');
});
server.listen(1337);
在终端1中执行:pm2 cluster.js -i 4 在终端2中执行:ab -n 10000 -c 500 -k http://127.0.0.1:1337/采用测试工具ab,-n 10000表示请求总数为10000, -c 500表示并发用户数为500 测试结果如下图:
pm2的监控信息: