Nodeシリーズ——Nodeシリーズで異常捕獲された重要な思考
915 ワード
process
オブジェクトのuncaughtException
イベントによって大域異常が発生したかどうかはともかく、サブドメインオブジェクトのerror
イベントによってサブドメイン異常が検出されたかどうかは、NodeJS公式文書では、異常処理が完了したらすぐにプログラムを再開することを強く推奨し、プログラムを実行し続けることではない.公式文書によると、異常が発生した後のプログラムは不確定な動作状態となり、すぐに終了しないと、プログラムに深刻なメモリ漏れが発生する可能性があります.しかし、ここではいくつかの事実を明らかにする必要があります.JS自体の
throw..try..catch
異常処理機構はメモリ漏れを起こさないし、プログラムの実行結果を予想外にさせることもないが、NodeJSは純粋なJSではない.NodeJSでは、多くのAPI内部はC/C++で実現されています.そのため、NodeJSプログラムの実行過程で、コードの実行経路はJSエンジン内部と外部を往復しています.したがって、
uncaughtException
またはdomain
を使用して異常を捕捉し、コードの実行経路にC/C++部分のコードが含まれている場合、メモリ漏れの原因になるかどうかを判断できない場合などは、異常を処理した後にプログラムを再開したほうがいいです.try
文を使って異常を捕捉した場合は、JS自体の異常が一般的で、控訴問題を心配する必要はない.中間部品の形式を通して,非同期における異常を処理するためにdomainを導入した.もちろん、domainは異常を捉えていますが、やはり異常によるスタックが失われてメモリが漏れてしまうため、このような状況が発生した時にはこのプロセスを再起動する必要があります.興味がある人はdoman-middlewareというdomainのミドルウェアを見に行ってもいいです.