Узел 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 в процессе и отправьте свое сообщение или консоль в этом обработчике.

Другие вопросы по тегам