Узел JS - Журнал рабочего кластера последнего исключения
Я работаю на сервере 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()
функция, как описано в документации:
http://nodejs.org/api/cluster.html
Но общий принцип Node заключается в том, чтобы использовать stdout и stderr по назначению, поэтому я, вероятно, просто console.error('whatever you need to say');
если бы это был я.
==== Обновлено на основе комментариев ====
В большинстве случаев сбой процесса происходит из-за необработанного исключения. Поэтому, если вы можете ожидать этих исключений, прослушайте их на соответствующем объекте. Чтобы отловить ошибки, которые вы не прогнозировали, прослушайте событие uncaughtException в процессе и отправьте свое сообщение или консоль в этом обработчике.