GC 関連の数値がどのように取得され、Java に渡す設定とjmap
どのように関連しているかを理解するのに助けが必要です。jstat
16GB のメモリを搭載したサーバーで、次の設定でアプリ (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
が大きいのに、 、MaxNewSize
、OldSize
、およびPermSize
すべてが小さいのはなぜMaxHeapSize
ですか? すべきではありませんNewSize + OldSize = heap size
か?そして、全体のヒープサイズが近づいているべきではありませんMaxHeapSize
か? が 4 に設定されている場合、NewSize
正確に半分になるのはなぜですか?OldSize
NewRatio
残りの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% 使用済み