Выбор ответа Senior Деплой и эксплуатация обновлено

Воркеры убиваются по OOM

Вопрос

В Kubernetes под с gunicorn периодически перезапускается с причиной OOMKilled, хотя один воркер занимает 300 МБ. Что проверить в первую очередь?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Суммарную память воркеров и мастера против limits.memory и её рост. Лимит памяти применяется ко всему контейнеру: 9 воркеров по 300 МБ уже 2,7 ГБ плюс мастер и пики.

Варианты ответа

  1. Число CPU на узле: при нехватке ядер Kubernetes убивает поды с причиной OOM
  2. Суммарную память воркеров и мастера против limits.memory и её ростправильный ответ
  3. Версию nginx-ingress: старые версии буферизуют ответы в памяти пода
  4. Настройку ALLOWED_HOSTS: отклонённые запросы копятся в памяти

Разбор

Лимит памяти применяется ко всему контейнеру: 9 воркеров по 300 МБ уже 2,7 ГБ плюс мастер и пики. Если лимит меньше, ядро убьёт процесс. Дальше смотрят, растёт ли память воркеров (утечки, большие ответы целиком в памяти), и выбирают меньше воркеров на под с большим числом подов, max_requests и --preload. CPU, nginx и ALLOWED_HOSTS к OOM отношения не имеют.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.