ヒープ ダンプを生成するときに発生するシステム GC 中に収集されるオブジェクトをキャプチャしたいと考えています。そのシステム GC を無効にする方法はありますか?
4 に答える
「ヒープダンプ」の代わりに「システムダンプ」を生成できます。そのドキュメントは見つかりませんでしたが、試したところ、「システムダンプ」によって「システムGC」がトリガーされないようです。
generateSystemDump
「システムダンプ」は、 JMX操作で要求できます。コマンドを使用する場合kill -3
は、JVMに環境変数を追加する必要があります。
JAVA_DUMP_OPTS=ONDUMP(SYSDUMP)
jextract
「システムダンプ」は、 EclipseMATにロードする前にツールで処理する必要があります。システムダンプもヒープダンプよりもはるかに大きくなります。これは主に、オブジェクトツリーだけでなく、実際のオブジェクトデータも含まれているためです。
-Xdisableexplicitgc
IBM JREでは、JVM 引数として追加することで、明示的な GC を無効にすることができます。ただし、この記事に基づくと、この議論は役に立たないようです。
IBM サポートへの PMR が役立つかもしれません。
ホットスポットを考慮すると、ヒープをダンプするときのVMの動作に影響を与えるパラメーターはありません。通常、GCコレクションはヒープをダンプする前にトリガーされます。
少なくとも、フルGCの前後にクラスヒストグラムの印刷を有効にすることができます。これにより、収集されたオブジェクトを確認できます。(XX:+PrintClassHistogramBeforeFullGC -XX:+PrintClassHistogramAfterFullGC
)
試すこともできますが-XX:+DisableExplicitGC
、これは役に立たないと思います。ヒープダンプを収集すると、常にいくつかのオブジェクトが収集されていることに気付きます。
この投稿に出くわし、2 つのボブを入れようと思いました。WebSphere Adminconsole からシステム コアを生成できます。[トラブルシューティング] > [Java ダンプとコア] に移動します。ダンプを収集するサーバーを選択します。システム ダンプをクリックして、システム コアを生成します。
また、MAT でヒープ メモリの分析のみを行う必要がある場合は、システム コアを jextract する必要はありません。システム コアには、ヒープダンプよりも多くの有用な診断データもあります。ほとんどの場合、ヒープ メモリをリークしているスレッドのスタックを確認できます。