Выбор ответа Senior HTTP, WSGI и ASGI обновлено

Таймаут воркера gunicorn

Вопрос

В логах gunicorn появились WORKER TIMEOUT и перезапуски воркеров. Что это значит?

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

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

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

Коротко

Правильный ответ: Воркер не отчитался мастеру дольше --timeout, обычно из-за долгого запроса. Мастер gunicorn следит за воркерами и убивает тех, кто не подаёт признаков жизни дольше timeout.

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

  1. Воркер не отчитался мастеру дольше --timeout, обычно из-за долгого запросаправильный ответ
  2. Клиент закрыл соединение до ответа, и gunicorn перезапускает воркер
  3. В nginx закончились воркеры, и gunicorn ждёт освобождения апстрима
  4. Python исчерпал лимит рекурсии, и мастер перезапускает упавший воркер

Разбор

Мастер gunicorn следит за воркерами и убивает тех, кто не подаёт признаков жизни дольше timeout. Для sync-воркера это значит, что один запрос шёл дольше таймаута: медленный SQL, внешний API без таймаута, бесконечный цикл. Лечение: таймауты на все внешние вызовы, оптимизация запроса, перенос долгой работы в очередь. Поднимать timeout вместо этого обычно плохая идея.

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

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