Node.js は、拡張可能に設計されたオープン ソースの JavaScript ランタイム環境で、コア機能を拡張するための多くのプラグインとライブラリをサポートしています。 Node.js がより広く使用されるようになるにつれて、アプリケーションでメモリ リークが発生することが増えており、これらのメモリ リークによってアプリケーションがクラッシュしたり、速度が遅くなったりする可能性があります。この記事では、Node.js でのメモリ リークの原因とメモリ リークを検出する方法を紹介します。
Node.js でのメモリ リークの原因は多数考えられます。最も一般的な理由は、循環参照とグローバル オブジェクトの使用です。循環参照を作成すると、オブジェクトがメモリ内に残り、リサイクルできなくなります。同時に、グローバル オブジェクトのすべてのプロパティがメモリに保存されるため、メモリ リークが発生する可能性もあります。
Node.js のメモリ リーク検出は主に 2 つのステップに分かれており、1 つはアプリケーションの自然な動作を観察して異常がないかどうかを確認するステップ、もう 1 つはツール検出を使用するステップです。
まず、アプリケーションの自然な動作を観察することでメモリ リークを検出できます。 Node.js に付属する組み込みモジュール process
を使用して、アプリケーションが占有するメモリを監視できます。以下に例を示します。
const used = process.memoryUsage().heapUsed / 1024 / 1024; console.log(`The script uses approximately ${used} MB`);
process.memoryUsage()
このメソッドは、Node.js プロセスによって使用されるメモリに関する情報を含む JSON オブジェクトを返します。この例では、heap Used
属性を使用して使用済みヒープ メモリ サイズを計算し、結果の単位は MB です。
2 番目に、いくつかのツールを使用してメモリ リークを検出できます。以下に、一般的に使用される Node.js メモリ リーク検出ツールをいくつか示します。
--inspect
パラメータが付属していますNode .js --inspect
パラメータが付属しています。これにより、Node.js デバッガが有効になり、Chrome デベロッパー ツールでの Node.js プログラムのデバッグがサポートされ、メモリ リークの監視に使用できます。 --inspect
パラメータを有効にする方法は次のとおりです。
node --inspect app.js
上記のコマンドを実行した後、Chrome のアドレス バーに chrome://inspect
と入力し、「」をクリックします。 「Node 専用の DevTools を開いて」デバッガーを起動します。
memwatch-next
は、Node.js のメモリ リークを検出するためのツールです。 js プロセス メモリ リークの問題を検出して報告します。 memwatch-next
の使用方法は次のとおりです。
const memwatch = require('memwatch-next'); memwatch.on('leak', (info) => { console.error('Memory leak detected:\n', info); }); // 运行 Node.js 应用程序
メモリ リークが発生すると、memwatch-next
は leak
イベントをトリガーし、関連するメモリ リーク情報。
heapdump
Node.js プロセスのヒープ ダンプ ファイルを生成して、プログラムのメモリ使用量の分析を容易にすることができます。 heapdump
の使用方法は次のとおりです。
const heapdump = require('heapdump'); heapdump.writeSnapshot('/path/to/my/heapdump.heapsnapshot'); // 运行 Node.js 应用程序
上記のコード スニペットを実行すると、heapdump
は指定された場所に .heapsnapshot
ファイルを生成します。このファイルは、Chrome デベロッパー ツールのプロセスのメモリ使用量を分析できます。
メモリ リークの問題を発見したら、特定の状況に対処する必要があります。一般に、メモリ リークの発生を減らすためにいくつかの手法を使用できます。
process.memoryUsage()
を手動で呼び出すなど、メモリをクリーンアップします。 つまり、高品質の Node.js アプリケーションを開発するには、Node.js のメモリ管理モデルとメモリ割り当ての原則を理解することが重要です。メモリ リークを発見した場合、メモリ リークの原因を理解し、メモリ リークの発生を減らすための適切な技術と対策を講じる必要があります。
以上がNodejsでメモリリークをチェックする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。