Контейнер с маленьким --kernel-memory и падает сам хост, а не контейнер

Теги: #Docker
Рейтинг: 34.2% · 2 голосов
Docker, Kubernetes, Helm, Terraform, Ansible, GitLab CI, GitHub Actions: автоматизация деплоя, инфраструктура как код, мониторинг и observability.
Ответить
Аватара пользователя
stas_stack90
Сообщения: 28
Зарегистрирован: Вт май 12, 2026 4:40 am

Контейнер с маленьким --kernel-memory и падает сам хост, а не контейнер

Сообщение stas_stack90 »

Словил дичь. Контейнер с --memory вёл себя нормально, но я выставил --kernel-memory маловато, и при упоре в него OOM ловит сам ХОСТ. При том что на хосте куча свободной памяти. Где тут логика?
👍 ❤️1 🔥 😄 🤔
✔ Лучший ответ сформирован автоматически — sasha_root
Логика тут такая: --kernel-memory ограничивает память ядра которую использует именно этот cgroup — это slab-аллокации, стековые страницы потоков ядра, dentry cache и прочее что аллоцирует ядро от имени процессов в контейнере. Когда контейнер упирается в kernel-memory лимит, ядро не может выделить память для своих структур внутри cgroup — и OOM killer срабатывает на уровне хоста, потому что с точк…
Перейти к ответу →
Аватара пользователя
rodion_pixel21
Сообщения: 12
Зарегистрирован: Пн май 11, 2026 5:37 am

Re: Контейнер с маленьким --kernel-memory и падает сам хост, а не контейнер

Сообщение rodion_pixel21 »

--kernel-memory давно deprecated и в cgroup v2 его вообще выпилили. Не трогай этот флаг, это известная мина, он делает ровно то что ты описал.
👍 ❤️ 🔥1 😄 🤔
Аватара пользователя
natalia_tech
Сообщения: 2
Зарегистрирован: Вс май 17, 2026 5:04 pm

Re: Контейнер с маленьким --kernel-memory и падает сам хост, а не контейнер

Сообщение natalia_tech »

О, спасибо. У меня Ubuntu 20.04, там ещё cgroup v1 был по дефолту, отсюда и грабли видимо. Убрал флаг — хост перестал падать.
👍2 ❤️ 🔥 😄 🤔
Аватара пользователя
jscode1641
Сообщения: 32
Зарегистрирован: Ср май 13, 2026 9:49 am

Re: Контейнер с маленьким --kernel-memory и падает сам хост, а не контейнер

Сообщение jscode1641 »

cgroup v2 по дефолту с Ubuntu 22.04. Куча старых гайдов по лимитам памяти Docker уже банально врёт под современные ядра. Всегда перепроверяйте под свою версию.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
bytedocker1834
Сообщения: 26
Зарегистрирован: Пн май 11, 2026 4:45 pm

Re: Контейнер с маленьким --kernel-memory и падает сам хост, а не контейнер

Сообщение bytedocker1834 »

А по производительности это не бьёт? У меня нагрузка приличная.
👍2 ❤️2 🔥 😄 🤔
Аватара пользователя
tcploop1339
Сообщения: 29
Зарегистрирован: Пн май 11, 2026 1:27 am

Re: Контейнер с маленьким --kernel-memory и падает сам хост, а не контейнер

Сообщение tcploop1339 »

Отличный разбор, добавил в закладки. Сэкономили мне кучу времени.
👍 ❤️ 🔥 😄1 🤔1
Аватара пользователя
sasha_root
Сообщения: 2
Зарегистрирован: Сб май 16, 2026 4:31 am

Re: Контейнер с маленьким --kernel-memory и падает сам хост, а не контейнер

Сообщение sasha_root »

✔ Лучший ответ — сформирован автоматически
Логика тут такая: --kernel-memory ограничивает память ядра которую использует именно этот cgroup — это slab-аллокации, стековые страницы потоков ядра, dentry cache и прочее что аллоцирует ядро от имени процессов в контейнере. Когда контейнер упирается в kernel-memory лимит, ядро не может выделить память для своих структур внутри cgroup — и OOM killer срабатывает на уровне хоста, потому что с точки зрения ядра это его собственная нехватка памяти, а не userspace. Свободная RAM на хосте тут вообще ни при чём — это другой пул. Флаг --kernel-memory кстати deprecated в ядрах 5.4+ и просто игнорируется на cgroups v2, так что если хост на современном ядре — он вообще не работает как ожидаешь.
👍 ❤️2 🔥 😄 🤔1
Аватара пользователя
asyncdocker5848
Сообщения: 13
Зарегистрирован: Вт май 12, 2026 4:39 pm

Re: Контейнер с маленьким --kernel-memory и падает сам хост, а не контейнер

Сообщение asyncdocker5848 »

Практически: если ты на Docker с cgroups v2 (Ubuntu 22.04+, Fedora 31+, Debian 11+), --kernel-memory тихо игнорируется начиная с ядра 5.4. Проверить: cat /sys/fs/cgroup/memory.stat внутри контейнера — если там нет поля kernel — ты на v2 и параметр не работает. На cgroups v1 (старые RHEL 7/8) он работает и именно там ловят такой OOM. Правильное решение для ограничения потребления ядерной памяти в 2026 — memory.high в cgroups v2, он даёт более предсказуемое throttling вместо OOM.
👍1 ❤️ 🔥 😄 🤔
Ответить
Поделиться темой: ✈ Telegram VK

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость