我正在使用Node JS服务器(0.10.30)及其Cluster功能。 每次工作人员终止时,我都会抓住“退出”事件并重新启动新工作人员。 我还想记录(在主群集上)工作者被终止的原因,例如例外或致命错误。
怎么做?
我的app.js文件看起来像这样:
var cluster = require('cluster');
var numCPUs = 2;
if (cluster.isMaster) {
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', function(worker, code, signal) {
console.log('worker %d died. Starting a new worker:', worker.id);
cluster.fork();
});
} else {
var domain = require('domain');
var d = domain.create();
d.on('error', function(er) {
console.error('error: ', er.stack);
// I never get the memory fatal error here
});
d.run(function() {
// The memory runs out in an async call
});
}
谢谢, 埃雷兹
答案 0 :(得分:0)
好吧,你可以使用send()
函数从工作人员向主人发送消息,如文档中所述:
http://nodejs.org/api/cluster.html#cluster_worker_send_message_sendhandle
但Node的一般原则是按预期使用stdout和stderr,所以如果是我的话,我可能只会做一个console.error('whatever you need to say');
。
====根据评论更新====
在大多数情况下,如果某个进程由于未捕获的异常而导致崩溃。因此,如果您可以预期这些异常,请在适当的对象上进行侦听。要捕获您未预测到的错误,请在流程上收听uncaughtException事件,并在该处理程序中发送您的消息或控制台