10

GC 関連の数値がどのように取得され、Java に渡す設定とjmapどのように関連しているかを理解するのに助けが必要です。jstat16GB のメモリを搭載したサーバーで、次の設定でアプリ (solr) を起動しています。

-XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled
-Xms12144m -Xmx12144m
-XX:NewRatio=4 -XX:SurvivorRatio=8 -XX:+UseCompressedOops

の出力がjmap始まります。

同時マークスイープ GC

ヒープ構成:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   最大ヒープ サイズ = 12733906944 (12144.0MB)
   NewSize = 2686976 (2.5625MB)
   MaxNewSize = 130809856 (124.75MB)
   旧サイズ = 5439488 (5.1875MB)
   新しい比率 = 4
   生存率 = 8
   PermSize = 21757952 (20.75MB)
   MaxPermSize = 176160768 (168.0MB)

NewSizeが大きいのに、 、MaxNewSizeOldSize、およびPermSizeすべてが小さいのはなぜMaxHeapSizeですか? すべきではありませんNewSize + OldSize = heap sizeか?そして、全体のヒープサイズが近づいているべきではありませんMaxHeapSizeか? が 4 に設定されている場合、NewSize正確に半分になるのはなぜですか?OldSizeNewRatio

残りのjmap出力は以下のとおりです。上記と一致し、concurrent mark-sweep generation解釈方法がわからないセクションが含まれています。

さらに、GC ログは、「望ましいサバイバー サイズ」が 6.2MB であることを示してい-XX:SurvivorRatio=8ますNewSize

ParNew最後に、GC ログにメッセージしか表示されません。これは、Eden の GC であると理解しています。

ヒープ使用量:
新世代 (エデン + 1 サバイバー スペース):
   容量 = 117768192 (112.3125MB)
   使用済み = 20402232 (19.45708465576172MB)
   無料 = 97365960 (92.85541534423828MB)
   17.324059793666528% 使用済み
エデン スペース:
   容量 = 104726528 (99.875MB)
   使用済み = 16408336 (15.648208618164062MB)
   無料 = 88318192 (84.22679138183594MB)
   15.667793359863893% 使用済み
宇宙から:
   容量 = 13041664 (12.4375MB)
   使用済み = 3993896 (3.8088760375976562MB)
   無料 = 9047768 (8.628623962402344MB)
   30.624128945508794% 使用済み
スペースへ:
   容量 = 13041664 (12.4375MB)
   使用済み = 0 (0.0MB)
   無料 = 13041664 (12.4375MB)
   0.0%使用
同時マークスイープ生成:
   容量 = 12603097088 (12019.25MB)
   使用済み = 7903352408 (7537.22420501709MB)
   無料 = 4699744680 (4482.02579498291MB)
   62.70960505037411% 使用済み
パーマ世代:
   容量 = 45903872 (43.77734375MB)
   使用済み = 27759192 (26.473228454589844MB)
   無料 = 18144680 (17.304115295410156MB)
   60.472441191889% 使用済み
4

1 に答える 1

3

MaxHeapSize が大きいのに、NewSize、MaxNewSize、OldSize、および PermSize がすべて小さいのはなぜですか?

サイズは必要な大きさだけです。短命のガベージをより多く生成すると、NewSize は大きくなります (MaxNewSize がどのように設定されているかはわかりませんが、通常は設定した値よりも小さくなります)。

同時マークスイープ生成

これには、capacity= 最大サイズ、used= 使用済み、free= 容量 - 使用済みがあります。

Eden の GC であると理解している GC ログの ParNew メッセージ。

お気づきのように、新しいスペースは小さいため頻繁にクリーンアップされ、古い世代は大きいため、ほとんどクリーンアップされません。

于 2012-08-06T14:48:06.470 に答える