2

GarbageCollectorMXBean を使用して、JVM Full GC CollectionCount と CollectionTime を取得しました。ただし、データは jstat によって収集されたデータとは異なります (ただし、 VisualVM のデータは jstat と同じです)。

そこで、VisualVM のソース コードをチェックして、それがどのように機能するかを調べたところ、VisualVM も GarbageCollectorMXBean を介して動作し、JVM の完全な GC データを収集することがわかりました。なんで?

Java アプリケーションの gc ログを追加します (JVM パラメータの一部は -XX:+PrintGCDetails -verbose:GC -Xloggc:/home/yubaofu/work/debug/gc.log です)。gc ログを読んだところ、完全な gc CollectionCount が jstat が表示するデータと等しくないことがわかりました。これは jstat full gc が full gc だけではないということですか?

visualVm vs jstat
visualVm フル gc は 4
jstat もフル gc 4

ここに画像の説明を入力

jconsole vs jstat
jconsole フル gc は 2
jstat フル gc は 4

ここに画像の説明を入力

なぜ等しくないのですか?

gc ログ vs jstat
gc ログ フル gc は 2
jstat フル gc は 4 ここに画像の説明を入力

下手な英語で申し訳ありませんが、私の言いたいことを理解していただければ幸いです:)

4

1 に答える 1

0

異なるものを表すデータを比較しているようです。

まず、GarbageCollectorMXBean.getCollectionCount は、特定の GC に対して「発生したコレクションの総数」を返します。これは、必ずしも Full GC の数ではなく、Young GC と Old GC の合計数を取得することを意味します。特にCMSを使用している場合。

完全な GC ではない CMS-initial-mark を grep しています。あなたの場合の完全な GC は、への呼び出しSystem.gc()、ParNew プロモーションの失敗、または同時モードの失敗になります。それ以外の場合は、CMS サイクルの数を見ているだけです。

最後に、VisualVM は SA エージェントを使用してより多くの情報を取得すると思いますが、JConsole は MX Bean のみを使用します。したがって、同じデータを取得することはできません。

于 2013-09-12T12:14:20.217 に答える