Я управляю SolrCloud на k8s со следующей настройкой:
Параметры кучи:
-server -Xms280m -Xmx312m
Другие параметры:
-XX:+UseParallelGC -XX:+UseParallelOldGC -XX:+UseAdaptiveSizePolicy -XX:ParallelGCThreads=4 -XX:AdaptiveSizePolicyOutputInterval=1 -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40 -XX:MaxGCPauseMillis=300 -XX:GCTimeRatio=19 -XX:AdaptiveSizePolicyWeight=90 -XX:MaxMetaspaceSize=128m -XX:MaxMetaspaceFreeRatio=90 -XX:MetaspaceSize=96m -XX:+ParallelRefProcEnabled
И максимальная куча, показанная на странице администратора, составляет только 277,5 млн, который 34,5 млн меньше Xmx
И если я изменю параметры кучи на
-server -Xms312m -Xmx312m
Тогда максимальная куча составляет около 300 м, что намного ближе к Xmx.
Мои вопросы таковы:
Больше наблюдений ...
Я пробовал это с другой настройкой памяти:
-server -Xms296m -Xmx360m
а максимальная куча, показанная в пользовательском интерфейсе администратора Solr, равна 320 кв.м.
После некоторых вычислений кажется, что максимальная куча всегда составляет около 90% от установленного мной Xmx.
312 * 0.9 = 280.8 (just 3.3m more than 277.5m)
360 * 0.9 = 324 (just 4m more than 320m)
Почему это происходит?
Вот некоторые подробности.
-Xmx
= максимальная куча java
-Xms
= начальная и минимальная куча java
В -Xmx
вариант и -Xms
в комбинации используются для ограничения размера кучи Java. Куча Java никогда не может вырасти больше, чем -Xmx
. Так же -Xms
значение можно использовать как «минимальный размер кучи», чтобы установить фиксированный размер кучи, задав -Xms
знак равно -Xmx
.
тем не мение -Xmx
не ограничивает общий объем памяти, который может использовать JVM.
Вот мой ответ в строке
Почему такая большая разница в первой настройке?
Это из-за разницы между начальной памятью и максимальной кучей памяти.
Почему разница становится меньше, когда я устанавливаю Xms = Xmx
Для производственной системы я бы предложил использовать то же самое, причина в том, что вы будете получать толчок и меньше gc большую часть времени, опять же, это зависит от рабочей нагрузки, профилирования системы и характера приложения.
Будет ли JVM по-прежнему соблюдать мои настройки Xmx? (Будет ли мое приложение все равно увеличено до 312 миллионов?)
Ответ - да, но не путайте с Xmx и JVM. Куча будет расти, когда приложению потребуется больше ресурсов.
Куча, состоящая из трех частей:
Согласно вашему снимку, он показывает 3 части от 195,13 МБ до 209,50 МБ до 277,50 МБ и остальные, если зарезервированы.
Надеюсь, это поможет.