Мне нужна помощь в понимании того, как числа, связанные с GC -, которые я получаю от jmap
и jstat
, связаны с настройками, которые я передаю в java. Я запускаю приложение (solr )со следующими настройками на сервере с 16 ГБ памяти:
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -Xms12144m -Xmx12144m -XX:NewRatio=4 -XX:SurvivorRatio=8 -XX:+UseCompressedOops
Вывод jmap
начинается:
Concurrent Mark-Sweep GC Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 12733906944 (12144.0MB) NewSize = 2686976 (2.5625MB) MaxNewSize = 130809856 (124.75MB) OldSize = 5439488 (5.1875MB) NewRatio = 4 SurvivorRatio = 8 PermSize = 21757952 (20.75MB) MaxPermSize = 176160768 (168.0MB)
Почему NewSize
, MaxNewSize
, OldSize
и PermSize
такие маленькие, когда MaxHeapSize
велико? Разве не должно NewSize + OldSize = heap size
? И не должен ли общий размер кучи приближаться к MaxHeapSize
? Почему NewSize
ровно половина OldSize
, когда NewRatio
установлено на 4?
Остальная часть вывода jmap
приведена ниже. Он соответствует приведенному выше и включает раздел concurrent mark-sweep generation
, который я также не знаю, как интерпретировать.
Кроме того, журналы GC указывают, что «желаемый размер оставшегося в живых» составляет 6,2 МБ, что также странно, учитывая, что я понимаю, что -XX:SurvivorRatio=8
должен сделать пространство для оставшегося в живых 1/8 от NewSize
.
Наконец, я вижу только сообщения ParNew
в своем журнале GC,как я понимаю, это GC для Эдема.
Heap Usage: New Generation (Eden + 1 Survivor Space): capacity = 117768192 (112.3125MB) used = 20402232 (19.45708465576172MB) free = 97365960 (92.85541534423828MB) 17.324059793666528% used Eden Space: capacity = 104726528 (99.875MB) used = 16408336 (15.648208618164062MB) free = 88318192 (84.22679138183594MB) 15.667793359863893% used From Space: capacity = 13041664 (12.4375MB) used = 3993896 (3.8088760375976562MB) free = 9047768 (8.628623962402344MB) 30.624128945508794% used To Space: capacity = 13041664 (12.4375MB) used = 0 (0.0MB) free = 13041664 (12.4375MB) 0.0% used concurrent mark-sweep generation: capacity = 12603097088 (12019.25MB) used = 7903352408 (7537.22420501709MB) free = 4699744680 (4482.02579498291MB) 62.70960505037411% used Perm Generation: capacity = 45903872 (43.77734375MB) used = 27759192 (26.473228454589844MB) free = 18144680 (17.304115295410156MB) 60.472441191889% used