Как Linux cgroups и namespaces изолируют Docker-контейнер и почему превышение лимита по CPU вызывает троттлинг, а по RAM — OOM?

Namespaces изолируют видимость ресурсов, а cgroups учитывают и ограничивают их потребление. CPU-квоту можно отложить до следующего периода, а при нехватке памяти требуется reclaim, отказ выделения или OOM.

Короткий ответ

Что ответить на собеседовании

Namespaces изолируют видимость ресурсов, а cgroups учитывают и ограничивают их потребление. CPU-квоту можно отложить до следующего периода, а при нехватке памяти требуется reclaim, отказ выделения или OOM.

Подробный разбор

Ответ с пояснениями

Namespaces изолируют видимость ресурсов, а cgroups учитывают и ограничивают их потребление. CPU-квоту можно отложить до следующего периода, а при нехватке памяти требуется reclaim, отказ выделения или OOM.

Исчерпавший cpu.max процесс обычно ждёт обновления квоты, поэтому растёт задержка, а не обязательно происходит авария. Предел memory.max сначала приводит к попыткам освободить память; если это невозможно, может сработать cgroup OOM. memory.high — другой механизм давления, не то же самое, что жёсткий предел. Изоляция ресурсов не равна отдельному ядру и зависит от настройки контейнера.

Источник: www.kernel.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее