pm2 cluster方案的执行效率为什么不及 node的单进程、多进程?
发布于 1 年前 作者 qiulanzhu 2480 次浏览 来自 问答

环境:

cpu信息.png

问题描述:

采用单进程、多进程、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 测试结果如下图: 单进程.png

多进程方案

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 测试结果如下图: 双进程.png

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

pm2的监控信息: monit.png

5 回复

自己顶一下。

ab和测试的服务器是在同一台机器上会对测试结果有影响  最好分开机器测试,

@yakczh 多谢提醒。

cluster 不也是启的子进程么,你说的多进程是2个子进程,pm2启了4个

回到顶部