环境:
问题描述:
采用单进程、多进程、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的监控信息:
自己顶一下。
马克
ab和测试的服务器是在同一台机器上会对测试结果有影响 最好分开机器测试,
@yakczh 多谢提醒。
cluster 不也是启的子进程么,你说的多进程是2个子进程,pm2启了4个
@qiulanzhu 后来拆开试过吗?什么情况啊,楼主