Почему стандартная функция Python os.cpu_count() внутри Docker-контейнера, запущенного в Kubernetes-поде с ограничением CPU: 2, часто возвращает общее количество ядер физического сервера, например 64? К каким критическим проблемам с размером пула потоков Gunicorn или Celery это приводит и как это исправить?

CPU-квота cgroup ограничивает время выполнения, а не обязательно видимое число процессоров. Поэтому os.cpu_count() может видеть 64 CPU, хотя контейнеру разрешено лишь 2 CPU-времени.

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

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

CPU-квота cgroup ограничивает время выполнения, а не обязательно видимое число процессоров. Поэтому os.cpu_count() может видеть 64 CPU, хотя контейнеру разрешено лишь 2 CPU-времени.

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

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

CPU-квота cgroup ограничивает время выполнения, а не обязательно видимое число процессоров. Поэтому os.cpu_count() может видеть 64 CPU, хотя контейнеру разрешено лишь 2 CPU-времени.

Автоподбор workers по числу CPU хоста вызывает лишние процессы, память, соединения к БД и троттлинг. Задавайте concurrency явно по измеренной нагрузке и бюджету контейнера. В cgroup v2 отношение quota/period берут из cpu.max с учётом родительских ограничений; cpuset и affinity тоже важны. process_cpu_count() учитывает доступность CPU по affinity, но не является универсальным измерителем временной квоты. Оптимальное число workers зависит также от I/O и памяти.

Источник: cdn.kernel.org, docs.python.org.

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

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

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

Подробнее