2014-11-06 53 views
2

我正在使用Node JS服务器(0.10.30)及其群集功能。 每次工人终止时,我都会捕获“退出”事件并重新启动新的工人。 我也想记录(在主集群上)工人被终止的原因,例如例外或致命错误。节点JS - 日志工作者群集最后一个异常

如何做到这一点?

我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) { 
 
\t console.log('worker %d died. Starting a new worker:', worker.id); 
 
\t 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

好了,你可以从工作人员将消息发送到主与send()功能,如文档中所述:

http://nodejs.org/api/cluster.html#cluster_worker_send_message_sendhandle

但是Node的一个基本原理是根据预期使用stdout和stderr,所以如果是我的话我可能只是做一个console.error('whatever you need to say');

====基于注释更新====

在大多数情况下,如果一个进程崩溃,那是因为未捕获的异常的。所以,如果你能预料到这些例外情况,请在适当的对象上倾听他们。为了赶上你没有预测错误,听取过程中uncaughtException事件,并在处理

+0

确定发送邮件或控制台,但我正在寻找一种方式来知道为什么工人集群已坠毁(例如,由于错误的内存外的),我无法找到一种方法,它登录到我的错误文件,所以我也不知道在哪里可以尝试发送此错误的消息发送到主 – 2014-11-07 09:34:42

+0

啊,我明白了。更新了答案 – Paul 2014-11-07 18:28:18