意図せずプロセスが終了しない時の調査方法

投稿者: Anonymous

非同期処理を多用したスクリプトで、全ての処理が完了してもプロセスが終了しないという現象が以前発生しました。当時はとりあえず一定時間を超えてプロセスが残っていたら強制終了するような仕組みで対応したのですが、最近になって「なにか非同期処理やタイマーが残っていてイベントループが終了しなかったのでは?」という仮説が浮かびあがりました。

処理が完了したところで process.exit(0) を呼べば確実に終了することはできると思いますが、実装にミスがある可能性を考えると、放置していても終了しない理由が知りたいです。

Node.jsのプロセスが意図せずして動き続けている場合、どのように調査するとよいでしょうか?

解決

processモジュールにドキュメント化されていないAPIがあります。

process._getActiveHandles();
process._getActiveRequests();

これらを使うと、Worker queueに残っているもの(プロセスを活かし続けているもの)を確認できるかもしれません。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *