Ограничения памяти Docker не вступают в силу для приложений Java в хосте Centos 7 - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь развернуть несколько приложений Java (весенней загрузки) в док-контейнерах на 1 хосте, где я устанавливаю ограничения памяти (--memory=30m --memory-swap=50m) для каждого.

Однако, когда я проверяю пределы с помощью статистики контейнера докера, я вижу, что каждый контейнер использует >400MB оперативной памяти хоста.Из-за этого я не могу запустить все нужные мне контейнеры, так как ядро ​​убивает некоторые из них (OOM).

Что мне нужно сделать, чтобы гарантировать, что память контейнеров контролируется с помощью опций памяти докера?

Мой хозяин - цифровой океанский сентос 7. Спасибо

1 Ответ

0 голосов
/ 12 октября 2018

Основная причина этой проблемы заключается в том, что JRE не знает, что он работает внутри контейнера.

Пусть JVM определяет, сколько памяти доступно в контейнере Docker https://blog.csanchez.org/2017/05/31/running-a-jvm-in-a-container-without-getting-killed

JAVA_OPTS = "- сервер -Djava.net.preferIPv4Stack = true -XX: + UnlockExperimentalVMOptions -XX: + UseCGroupMemoryLimitForHeap -XX: MaxRAMFraction = 1"

Убедитесь, что у вас естьВерсия 8-131 или выше
В случае JDK-9 будет доступно правильное определение доступной памяти внутри контейнера.

Дополнительная ссылка: Запуск Docker -m не устанавливает ограничение (JVM принимаетразмер всего хост-компьютера для xms и xmx)
и
https://developers.redhat.com/blog/2017/03/14/java-inside-docker/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...