2012-01-03 31 views
3

upstartを使用してnode.jsを実行するデーモンを起動しています(expressおよびconnect- Redisの)httpとnode.jsメインプロセスがABRTシグナルで殺されましたが、process.on( "SIGABRT"、...)によってキャッチされませんでした。

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

すべてにつき同じノード.jsファイルでHTTPSサーバは、()起動時に罰金であり、すべてのアプリの機能は、後に時々(継続時間を変えた後、一貫して期待通りに動作しているように見えますが、数時間、場合によっては1日後)、デーモンプロセスが終了し、私が持っているログは唯一のものです。

daemon.log:

myserverのinitを:myupstartscriptメインプロセス(3410)私のノードのjsファイルでABRT信号

によって殺されたが、私が置かれました:

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

いずれもイベントをキャッチ。

イベントをシミュレートする方法がわかりません。私は

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

私process.onを使用してみました は( 'SIGABRT'、...)それらをキャッチ。

私が気づいた他のもの:

  • 私はHTTPSサーバずにサービスを実行すると、クラッシュが起こることはありません。
  • 他のログに基づいて、ユーザーがトリガーしたイベントの結果ではない
  • 私が依存している他のアプリケーション固有のサービス(redis-server、mongod)はイベントに関連していないようです通常どおりサービスを続行してください。
  • 私はupstartスクリプトをクラッシュ時に再生成するように設定しました。

どのように私はそれをトレースする可能性がありますか?

マイセットアップ: LinuxのILV1 2.6.35.4-rscloud#8 SMP月9月20日15時五十四分33秒UTC 2010 x86_64のGNU/Linuxの ノードv0.5.11-前

感謝。

答えて

1

あなたは

process.on('exit', function() { 
    console.log('About to exit.'); 
}); 
+0

感謝の出口使用上のノードをキャッチしたい場合は、私が実際に可能であればアボート信号によって引き起こさ終了を防止またはイベントについてのいくつかのデータをロギングすることで原因を見つけようとしています。今のところ、私はupstartで自動的にrespawningですが、私はむしろノード内でそれを処理したいと思います。 – Ray

+1

ああ、あなたは 'process.on( 'SIGINT'、....)' –

+0

を使ってみたいですねぇ - 私もこれに直面していますが、これを解決することができましたか?これがメモリリークであると仮定するか、Linux sysctlで設定されているものよりもメモリにあまりにも多くをロードすることを仮定します。 –

関連する問題