4

Elasticsearch ノードの JVM ヒープ使用率が一貫して 80% を超えている理由を突き止めたいと思います。これを行うために、実行してヒープダ​​ンプを取得します

jmap.exe -heap:format=b 5348

(5348 はプロセス ID です)。その後、VisualVM でダンプを分析できます。

問題はjmap、ダンプの取得中に JVM を一時停止することです。そのため、ノードは基本的に約 5 分間オフラインになります。

この記事では、Linuxでのコアダンプの取得に依存するより高速なアプローチを提案していますgdb。コアダンプを作成するWinDbgは既に試しましたが、VisualVMでは使えませんでした。

Windows にも同様のアプローチはありますか? 数分ではなく数秒でヒープダンプを取得するにはどうすればよいですか?

4

1 に答える 1

12

でコアダンプを取得しWinDbgたら、次を実行してそこからヒープ ダンプを抽出する必要があります。

jmap -heap:format=b "C:\Program Files\Java\...\bin\java.exe" core.mdmp

これはオフラインで行うことができます。実行中の Java プロセスとの対話は必要ありません。heap.binその後、VisualVMで生成されたファイルを開くことができます。


または、クラスのヒストグラムを取得することもできます。これは、完全なヒープ ダンプよりも高速に生成されます。

jmap -histo <PID>

インスタンスがヒープ内で最も多くのスペースを占有しているクラスのリストが表示されます。多くの場合、この情報は、記憶がどこで失われたかを知るのに十分です。

于 2016-03-06T01:57:16.717 に答える