Максимальная куча ограничена 256 МБ.
Вы имеете в виду через -m
в docker? Если это так, то это не указанная куча java, а общая память.
Я попытался обновить настройку MaxRAMFraction до 1
MaxRAMFraction
устарела и не используется, забудьте об этом.
UseCGroupMemoryLimitForHeap
устарела и будет удалена. Используйте UseContainerSupport
, который был портирован на java -8.
MaxRAM = 2g
Знаете ли вы, что это на самом деле делает? Он устанавливает значение «физической» оперативной памяти, которое JVM должна считать имеющимся у вас.
Я предполагаю, что вы не установили здесь -Xms
и -Xmx
специально? Поскольку вы не знаете, сколько памяти будет иметь контейнер? Если таковые, мы в одной обуви. Мы делаем знаем, что минимум, который мы собираемся получить, равен 1g
, но я понятия не имею о максимуме, поэтому я предпочитаю не устанавливать -Xms
и -Xmx
явно.
Вместо этого мы делаем:
-XX:InitialRAMPercentage=70
-XX:MaxRAMPercentage=70
-XX:+UseContainerSupport
-XX:InitialHeapSize=0
И это все. Что это делает?
InitialRAMPercentage
используется для расчета начального размера кучи, НО только в случае отсутствия InitialHeapSize/Xms
. MaxRAMPercentage
используется для расчета максимальной кучи . Не забывайте, что процессу java нужно больше, чем , просто heap
, ему также нужны собственные структуры; вот почему это 70
(%).