動作しているコードがいくつかありますが、メモリリークがあります。
node.jsでメモリリークを追跡するための良い戦略は何ですか?
このようなリークを探すときは、どのような手順に従う必要がありますか?
コードのリークを追跡するにはどうすればよいですか?
ありがとう
動作しているコードがいくつかありますが、メモリリークがあります。
node.jsでメモリリークを追跡するための良い戦略は何ですか?
このようなリークを探すときは、どのような手順に従う必要がありますか?
コードのリークを追跡するにはどうすればよいですか?
ありがとう
これは、アプリケーションのメモリ使用量をプロファイリングすることで把握できます。
Javascript オブジェクトはヒープに割り当てられるため、ヒープをダンプできるツールが必要になります。ヒープ ダンプを取得した後、それを調べて、特定のオブジェクト (または関数) のインスタンスがいくつ存在するかを確認できます。
たとえば、コードでは、ユーザーが接続するたびにソケットを作成することがわかっています。3 人のユーザーが接続しているときにヒープをダンプすると、最大 3 つのソケットが表示されるはずです。これらのユーザーが切断した後にヒープをダンプすると、~0 個のソケットが表示されるはずです。
Node.js ヒープ ダンプで Chrome ヒープ ダンプ アナライザーを実際に使用できます。
Chrome ヒープ ダンプ アナライザーに関するドキュメント: https://developers.google.com/chrome-developer-tools/docs/heap-profiling
Node.js ヒープ ダンプを取得して chrome で検査できるようにするプロジェクト: https://github.com/bnoordhuis/node-heapdump
参考までに、関数はセクションの下のヒープ ダンプに表示されます(closure)
。
ヒープ ダンプに役立つものとして表示されるように、(名前が必要ない場合でも) 関数に名前を付けることを確認する必要があります。
たとえば、次のようなもの
function() {
}
ヒープダンプのように表示されfunction()
ます。一方:
function taggedFunction() {
}
ヒープダンプのように表示されfunction taggedFunction()
ます。100 個の taggedFunctions を作成すると、ヒープ ダンプに taggeFunction が 100 回表示されます。基本的に、関数に名前を付けることで、それらを作成してリークし続けているかどうかを判断できます。