Варианты настройки JVM

Наше приложение показывает частые полные сборщики мусора после загрузки около 24 часов. Принудительный перезапуск.

Когда мы проанализировали наши журналы GC, это показало, что из 20 ГБ MaxHeap только 1 ГБ использовался для молодого поколения, а 19 ГБ использовалось СТАРЫМИ поколениями.

Опции команды были -Xms2g -Xmx20g

Следует ли увеличить -Xms2g до 10 ГБ или сделать равным 20 ГБ, чтобы соотношение NewRatio по умолчанию, равное 2, могло позволить молодому поколению использовать большую часть JVM?


person MPN    schedule 18.09.2018    source источник
comment
Когда JVM почувствовала необходимость расширить первоначальную кучу 2 ГБ до 20 ГБ, в этом должна была быть необходимость, и наличие 19 ГБ старого поколения вызывает тревогу. Был ли этот 19 ГБ Old Gen на самом деле заполнен? Затем вам следует проверить наличие утечек памяти, а не пытаться настроить JVM.   -  person Holger    schedule 18.09.2018


Ответы (1)


Отслеживал кучу JVM с помощью jmap -histo и обнаружил закономерность, когда она дает всплеск размера кучи. Также попробовал анализ журнала GC, используя http://gceasy.io.

На самом деле некоторые объекты гибернации накапливались в транзакции, что было проблемой в коде.

Исправил это в коде, и это помогает держать кучу под контролем, а не увеличивать ее.

С другой стороны, было замечено, что, хотя соотношение New-Old не было указано, JVM должна была использовать соотношение 1:2, но это было не так. Поэтому были специально предоставлены значения для NewSize и MaxNewSize, что помогло получить лучшие результаты.

person MPN    schedule 22.09.2018