У меня есть приложение Java, работающее в контейнере (eclipse-temurin:21-jre-alpine) в кластере Kubernetes, и я пытаюсь оптимизировать использование им памяти.
Требуемый размер кучи очень острый. По умолчанию, если не принимаются очень большие запросы, память практически не требуется. Однако иногда необходима большая куча.
Я изо всех сил пытаюсь заставить JVM использовать как можно меньше оперативной памяти в нормальных условиях, но при этом допускать случайные всплески использования памяти без сбоев в работе контейнер.
Я установил лимит ресурсов Kubernetes в 1 ГБ для контейнера, который подхватила JVM. После настройки этого ограничения использование ОЗУ снизилось с 4 ГБ до 400 МБ без заметного снижения качества обслуживания.
Однако иногда приложению необходимо загрузить до, скажем, 3 ГБ памяти для определенные запросы, что приводит к сбою контейнера из-за жесткого ограничения в 1 ГБ.
Как настроить JVM и Kubernetes для установки жесткого ограничения (например, 5 ГБ), но при этом убедиться, что JVM использует минимальный объем оперативной памяти в нормальных условиях?
Подробнее здесь: https://stackoverflow.com/questions/784 ... -necessary