Контейнеру выдали 4 ГиБ памяти, а сервис падает с OutOfMemoryError на 1 ГиБ кучи
Сервис обработки выгрузок запускается командой java -jar app.jar без параметров памяти, лимит контейнера 4 ГиБ. На больших выгрузках приложение падает с java.lang.OutOfMemoryError: Java heap space, а мониторинг показывает, что контейнер использовал около 1,2 ГиБ.
В чём причина?
- Без настроек JVM берёт под кучу лишь четверть памяти контейнера
- JVM в контейнере не видит лимит и считает, что памяти 256 МБ
- Утечка памяти: куча растёт, пока не займёт весь лимит
- Лимит контейнера учитывает только память вне кучи
