Я использовал nginx и gunicorn для размещения своего сайта на двух серверах,
Оба сервера имеют одинаковые версии пакетов, и веб-сайт успешно размещен,
Но на одном из моих серверов gunicorn всегда получает тайм-аут, и я получаю ошибку
[CRITICAL]Worker Timeout
Booting worker with pid
Worker cannot boot with pid
И после этого я получаю ошибку 502 Badgateway на веб-странице. Я должен перезапустить процесс gunicorn, чтобы открыть сайт.
Ниже приведен журнал ошибок:
2014-02-16 14:29:53 [1267] [CRITICAL] WORKER TIMEOUT (pid:4994)
2014-02-16 14:29:53 [1267] [CRITICAL] WORKER TIMEOUT (pid:4994)
2014-02-16 14:29:53 [22140] [INFO] Booting worker with pid: 22140
И я получаю непрерывную ошибку, как это,
2014-02-16 14:29:53 [22140] [DEBUG] Ignoring EPIPE
Ignoring EPIPE
2014-02-16 14:29:53 [22140] [DEBUG] Ignoring EPIPE
Ignoring EPIPE
2014-02-16 14:29:57 [22140] [DEBUG] Ignoring EPIPE
Ignoring EPIPE
И рабочий начинает снова,
2014-02-16 14:32:44 [1267] [CRITICAL] WORKER TIMEOUT (pid:4993)
2014-02-16 14:32:44 [1267] [CRITICAL] WORKER TIMEOUT (pid:4993)
2014-02-16 14:32:44 [22276] [INFO] Booting worker with pid: 22276
Снова игнорирование ошибки EPIPE, и это продолжается до тех пор, пока я не перезапущу gunicorn. И когда я получаю эту ошибку, я получаю 504 ошибку шлюза от nginx
strace -p <PID> -e trace=network -t
Ответы:
Чтобы исправить это, увеличьте время ожидания в Nginx,
В Nginx увеличьте
proxy_connect_timeout
иproxy_read_timeout
, вы можете добавить следующее в файл nginx.conf подhttp
директивой. Они по умолчанию 60-х годов.proxy_connect_timeout 300s;
proxy_read_timeout 300s;
Перезапустите сервер Nginx. Смотрите nginx документы по таймаутам .
Если указанное выше исправление не работает, то увеличьте флаг ожидания Gunicorn в конфигурации Gunicorn, по умолчанию время ожидания Gunicorn составляет 30 секунд.
- время ожидания 90
Gunicorn документация о тайм-ауте
-t INT, --timeout INT 30 Рабочие, которые молчат дольше, чем это количество секунд, погибают и перезапускаются.
Обычно устанавливается на тридцать секунд. Установите это значение значительно выше, если вы уверены в последствиях для работников синхронизации. Для несинхронизированных работников это просто означает, что рабочий процесс все еще обменивается данными и не привязан к отрезку времени, необходимому для обработки одного запроса.
Документы Gunicorn о тайм-аутах рабочих
Надеюсь, это решит это.
источник