Основной процесс node.js убит сигналом ABRT, но не перехвачен process.on(SIGABRT,)

Я использую upstart для запуска демона для запуска http и https сервера node.js (используя экспресс и connect-redis) (в том же файле node .js) за

http://kevin.vanzonneveld.net/techblog/article/run_nodejs_as_a_service_on_ubuntu_karmic/

При запуске все в порядке, и все функции приложения работают, как и ожидалось, но постоянно, после различной продолжительности (иногда через несколько часов, иногда через день), процесс демона завершается, и единственный журнал, который у меня есть, находится в

демон.лог:

myserver init: основной процесс myupstartscript (3410) убит сигналом ABRT

в моем файле node js я разместил:

process.on('uncaughtException',...);
process.on('SIGABRT', .... );
process.on('ABRT',...);

ни один из которых не ловит событие.

Я не знаю, как смоделировать событие. Когда я попытался использовать

kill -SIGABRT [the pid]
kill -ABRT [the pid]

мой process.on('SIGABRT',..) ловит их.

Другие вещи, которые я заметил:

  • Если я запускаю службу БЕЗ https-сервера, сбой никогда не происходит.
  • Судя по другим моим журналам, сбой НЕ является результатом события, инициированного пользователем.
  • Ни одна из других специфических служб приложений, на которые я полагаюсь (redis-server, mongod), похоже, не связана с этим событием, они продолжают обслуживаться в обычном режиме.
  • Я настроил сценарий выскочки на возрождение при сбое, и он это делает.

Любая помощь в том, как я могу отследить это?

Моя установка: Linux iLV1 2.6.35.4-rscloud #8 SMP Пн, 20 сентября, 15:54:33 UTC 2010 x86_64 GNU/Linux node v0.5.11-pre

Спасибо.


person Ray    schedule 03.01.2012    source источник


Ответы (1)


Если вы хотите поймать узел при выходе, используйте

process.on('exit', function () {
  console.log('About to exit.');
});
person Tim P.    schedule 04.01.2012
comment
Спасибо, но я на самом деле пытаюсь предотвратить выход, вызванный сигналом прерывания, если это возможно, или выяснить причину, регистрируя некоторые данные о событии. На данный момент я автоматически возрождаю его с помощью выскочки, но я бы предпочел обрабатывать его внутри узла, если бы мог. - person Ray; 04.01.2012
comment
Эй, я тоже столкнулся с этим, ты смог решить эту проблему? Предполагая, что это утечка памяти или слишком большая загрузка в память, чем настроено в Linux sysctl. - person Shamasis Bhattacharya; 09.01.2016