Сначала отличите утечку живых объектов от фрагментации и удержания памяти allocator. Для prefork Celery полезна плановая замена дочерних процессов по числу задач или объёму памяти, но это не исправляет причину.
Как бороться с утечками памяти в долгоживущих воркерах Celery, вызванными фрагментацией памяти Python-процесса?
Сначала отличите утечку живых объектов от фрагментации и удержания памяти allocator. Для prefork Celery полезна плановая замена дочерних процессов по числу задач или объёму памяти, но это не исправляет причину.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Сначала отличите утечку живых объектов от фрагментации и удержания памяти allocator. Для prefork Celery полезна плановая замена дочерних процессов по числу задач или объёму памяти, но это не исправляет причину.
Сравните профиль живых объектов и RSS после типичных задач, ограничьте размер батчей, буферов и предварительно полученной работы. worker_max_tasks_per_child и worker_max_memory_per_child позволяют перераздавать работу новым процессам в поддерживаемом пуле. Лимит памяти применяется с заменой после задачи, поэтому одна огромная задача всё ещё способна вызвать OOM. Перезапуск — эксплуатационная защита; необоснованные глобальные кеши и удерживающие ссылки нужно устранять отдельно.
Источник: docs.celeryq.dev.