Рано или поздно вы все равно столкнетесь или уже столкнулись с запуском Java в pod. В чем проблемы запуска и как их обойти? До версии 8 java не знала о контейнерах ничего и просто забирала себе определённый процент от всей доступной памяти. Размер памяти jvm берет из системных данных, игнорируя ограничения cgroup то есть ограничения контейнера. Память контейнера ограниченна (что почти всегда правда в kubernetes), java машина будет пытаться использовать память больше возможной в контейнере, не сможет это сделать и аварийно завершится. С версии 8 менеджер памяти java учитывает ограничения контейнера и почти правильно использует память. Это теория, теперь перейдем к практики. У java есть два параметра -Xms - устанавливает минимум используемой памяти и -Xmx - устанавливает максимум используемой памяти. Мы должны ограничить лимит памяти. Вот реальный пример из настройки контейнера elastic search: И для JVM тоже нужно установить лимиты: Обратите внимание мы просим pod дать 2 гигабайта а java
Запустить Java в Kubernetes и не облажаться.
14 сентября 202014 сен 2020
327
2 мин