Spring Boot в k8s: Xmx=лимиту пода, а под всё равно OOMKilled
Рейтинг: 73% · 17 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
- appflow9934
- Сообщения: 5
- Зарегистрирован: Пн май 11, 2026 6:31 am
✔ Лучший ответ сформирован автоматически — maria
JVM — это не только heap. -Xmx1g ограничивает только старый+молодой gen, но у JVM ещё куча всего живёт вне хипа: Metaspace (стандартно до 256–512 МБ под Spring Boot с кучей аннотаций), thread stacks (~1 МБ на поток, при 200 потоках это уже 200 МБ), direct ByteBuffers (Netty, NIO), JIT-компилированный код. Итого реальное потребление процесса может быть +600–800 МБ поверх -Xmx. Формула для лимита п…
- makar_root
- Сообщения: 28
- Зарегистрирован: Пн май 11, 2026 1:09 am
- omegaai1991
- Сообщения: 21
- Зарегистрирован: Вт май 12, 2026 9:35 pm
Re: Spring Boot в k8s: Xmx=лимиту пода, а под всё равно OOMKilled
✔ Лучший ответ — сформирован автоматически
JVM — это не только heap. -Xmx1g ограничивает только старый+молодой gen, но у JVM ещё куча всего живёт вне хипа: Metaspace (стандартно до 256–512 МБ под Spring Boot с кучей аннотаций), thread stacks (~1 МБ на поток, при 200 потоках это уже 200 МБ), direct ByteBuffers (Netty, NIO), JIT-компилированный код. Итого реальное потребление процесса может быть +600–800 МБ поверх -Xmx. Формула для лимита пода: Xmx + ~300-400MB overhead. Ставь лимит минимум 1.5–1.7 ГБ при Xmx1g, либо переходи на -XX:MaxRAMPercentage=75 и пусть JVM сама считает под контейнерный лимит.
- nullssh6031
- Сообщения: 3
- Зарегистрирован: Пн май 11, 2026 9:28 am
Re: Spring Boot в k8s: Xmx=лимиту пода, а под всё равно OOMKilled
Ещё момент про Metaspace: если у тебя много классов (Spring, Hibernate генерят прокси), то при дефолтном -XX:MaxMetaspaceSize unlimited Metaspace тихо растёт и в итоге OOM от ядра прилетает не в heap, а в native. Ставь явно -XX:MaxMetaspaceSize=256m или 512m. Тогда хотя бы OOMError будет выброшен самой JVM с нормальным stack trace, а не молчаливый SIGKILL от k8s.
- omegaai1991
- Сообщения: 21
- Зарегистрирован: Вт май 12, 2026 9:35 pm
Re: Spring Boot в k8s: Xmx=лимиту пода, а под всё равно OOMKilled
Для диагностики в k8s удобно смотреть не на jvm heap, а на RSS процесса: kubectl exec <pod> -- cat /proc/1/status | grep VmRSS. Если RSS кратно больше Xmx — это подтверждение нативного оверхеда. Ещё полезно включить -Xlog:gc*:stdout и смотреть, не ли GC-паузы прямо перед OOMKill — иногда под OOMKill попадает не по памяти а по liveness probe таймауту во время Full GC.
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
- Внедрили ClickHouse, а Postgres всё равно никуда не делся. Так и должно быть?
17 ответов · 1684 просмотров
-
- Контекст-окно растёт, а агент всё равно тупеет на больших задачах. Боремся с этим
10 ответов · 842 просмотров
-
- Поставил все сиды, а loss всё равно гуляет между запусками — кто победил недетерминизм в PyTorch?
17 ответов · 702 просмотров
-
- LoRA на 15 фоток пережаривается — кручу dim/alpha, всё равно вылезает один и тот же кадр
6 ответов · 520 просмотров
-
-
- AI пишет в 1.7 раза больше багов чем люди — и всё равно все его используют. Что происходит?
6 ответов · 16 просмотров
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость