为了充分利用多核cpu,采用多进程。而由于需求中,需要用到子进程与主进程之间消息交互处理。故不能使用pm2命令实现多进程,而是采用nodejs中cluster模块实现。 Demo如下
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('listening', function (worker, address) {
console.log('[master] ' + 'listening: worker' + worker.id + ',pid:' + worker.process.pid + ', Address:' + address.address + ":" + address.port);
});
Object.keys(cluster.workers).forEach(function(id) {
cluster.workers[id].on('message', function(msg){
console.log('[master] ' + 'message ' + msg);
cluster.workers[id].send('[master] ' + 'hi worker' +process.pid);
});
});
} else if (cluster.isWorker) {
process.send('[worker] worker'+process.pid+' received!');
process.on('message', function(msg) {
console.log('[worker] '+msg);
});
http.createServer(function (req, res) {
res.writeHead(200, {"content-type": "text/html"});
res.end('worker'+cluster.worker.id+',PID:'+process.pid);
}).listen(3000);
}
使用node运行时候,node demo.js 。正常
使用pm2运行时候,pm2 start demo.js 。通过pm2 monit 监控,发现日志一直在打印记录,意味着进程会一直发送消息,而不是停止 ![untitled3.png](//dn-cnode.qbox.me/Fl4gXckslWKJBXoTaFYvgwOZQBm
而通过pm2 运行我的实例代码时候,甚至会出现报错
不知道这是什么原因所导致的,应该怎样处理?我目前是专用forever来执行,但不清楚为什么使用pm2 会导致这个问题,希望知道的朋友给我解疑一下。 谢谢大家。