-XX:-HeapDumpOnOutOfMemoryError
オプションを使用して64ビットJVMによってダンプされた6.5GBのHprofファイルがあります。私はそれを16GB64ビットマシンに置いて、jhatに入れようとしていますが、メモリが不足し続けています。最小設定のためにjvmargsを渡そうとしましたが、最小値を拒否し、最大値に達する前にメモリが不足しているようです。
メモリが不足しているjvmがヒープを非常に大きくダンプするため、RAMが2倍のボックスにロードできないのはちょっとばかげているようです。これを実行する方法、または分析を償却する方法はありますか?
Eclipseメモリアナライザ を見てみましょう。このツールは素晴らしいです、そして私はこのツールでいくつかのギグヒープを見てきました。このツールの良いところは、ダンプにインデックスを作成するため、一度にすべてがメモリに保存されるわけではないことです。
Jhatを起動するコマンドとしてjhat -J-d64 -J-mx16g myheap.hprof
に相当するものを使用します。つまり、これにより、最大ヒープサイズが16ギガバイトの64ビットモードでjhatが起動します。
プラットフォームのJVMがデフォルトで64ビットモードの操作になっている場合は、-J-d64
オプションは不要です。
11 GBのhprofファイルをロードする必要があり、Eclipseメモリアナライザーではロードできませんでした。私がやったことは、インスタンス情報をランダムに削除することによってhprofファイルのサイズを縮小するプログラムを書くことでした。 hprofファイルのサイズを1GBに下げたら、Eclipseメモリアナライザーでファイルを開いて、メモリリークの原因を知ることができました。