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 集群 - 每个核心 1 个工作人员会减慢主线程速度?