Node JS - 记录工作集群最后一个异常

Posted

技术标签:

【中文标题】Node JS - 记录工作集群最后一个异常【英文标题】:Node JS - Log worker cluster last exception 【发布时间】: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
  );

谢谢, 埃雷兹

【问题讨论】:

【参考方案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 事件,并在该处理程序中发送您的消息或控制台

【讨论】:

好的,但我正在寻找一种方法来了解工作集群崩溃的原因(例如由于内存不足错误),但我找不到将其记录到的方法我的错误文件,所以我也不知道在哪里尝试将此错误作为消息发送给主人 啊,我明白了。更新答案

以上是关于Node JS - 记录工作集群最后一个异常的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 集群

Node.js 集群 - 最佳工作人员数量

Node.js 集群 - 每个核心 1 个工作人员会减慢主线程速度?

Node.JS、Socket.IO 和集群中的 WebSocket 握手不起作用

Node.js 集群共享缓存

使用PM2管理Node.js集群