【问题标题】:Node JS - Log worker cluster last exceptionNode JS - 记录工作集群最后一个异常
【发布时间】:2015-01-03 04:25:10
【问题描述】:

我正在开发 Node JS 服务器 (0.10.30) 及其集群功能。 每次工作人员终止时,我都会捕获“退出”事件并重新启动新工作人员。 我还想记录(在主集群上)工作人员被终止的原因,例如异常或致命错误。

怎么做?

我的 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
  });
}

谢谢, 埃雷兹

【问题讨论】:

    标签: javascript node.js node-cluster node.js-domains


    【解决方案1】:

    好吧,您可以使用send() 函数将消息从worker 发送到master,如文档中所述:

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

    但 Node 的一般原则是按预期使用 stdout 和 stderr,所以如果是我,我可能只会做一个 console.error('whatever you need to say');

    ==== 根据评论更新====

    在大多数情况下,如果进程崩溃是因为未捕获的异常。因此,如果您可以预料到这些异常,请在适当的对象上监听它们。要捕获您未预料到的错误,请在进程上监听 uncaughtException 事件,并在该处理程序中发送您的消息或控制台

    【讨论】:

    • 好的,但我正在寻找一种方法来了解工作集群崩溃的原因(例如由于内存不足错误),但我找不到将其记录到的方法我的错误文件,所以我也不知道在哪里尝试将此错误作为消息发送给主人
    • 啊,我明白了。更新答案
    猜你喜欢
    • 2021-10-31
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 2014-09-11
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多