Я запускаю 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 МБ и остальное, если зарезервировано.
Надеюсь, это поможет.