Долгосрочные запросы с gunicorn + nginx

8

Я собрал сервер интеграции для нашего приложения на основе Django. Некоторые функции все еще являются экспериментальными и приводят к чрезмерно длинным запросам.

Пока я в порядке с плохой производительностью, но мне нужно иметь возможность интегрироваться. Всякий раз, когда мы используем функцию, которая приводит к длинному запросу, приложение зависает (как и ожидалось), а затем, возможно, через полторы минуты, возвращает «502 - Bad Gateway». В остальном приложение работает нормально.

Я проверил журнал Gunicorn, и всякий раз, когда это происходит, я получаю строку, как

2012-01-20 17:30:13 [23128] [DEBUG] GET /results/
2012-01-20 17:30:43 [23125] [ERROR] WORKER TIMEOUT (pid:23128)
Traceback (most recent call last):
  File "/home/demo/python_envs/frontend/lib/python2.6/site-packages/gunicorn/app/base.py", line 111, in run
    os.setpgrp()
OSError: [Errno 1] Operation not permitted

однако это происходит задолго до фактического рабочего времени, которое я установил на 10 минут, чтобы убедиться. Вот часть сценария выскочки, который запускает gunicorn.

description "..."

start on runlevel [2345]
stop on runlevel [!2345]
#Send KILL after 5 seconds
kill timeout 5
respawn

env VENV="/path/to/a/virtual/env/"

#how to know the pid
pid file $VENV/run/guniconr-8080.pid

script
exec sudo -u demo $VENV/bin/gunicorn_django --preload --daemon -w 4 -t 600 --log-level debug --log-file $VENV/run/gunicorn-8080.log -p $VENV/run/gunicorn-8080.pid -b localhost:8080 /path/to/settings.py
end script

Я использую Gunicorn версии 0.13.4. Любая помощь будет принята с благодарностью.

Мэтт Луонго
источник

Ответы:

5

502 Bad Gatewayозначает, что ваш рабочий оружейник истек. Вы можете добавить --timeoutопцию к gnuicornкоманде. По умолчанию 30 с.

Как отмечает @ greg-k, proxy_read_timeoutопция Nginx контролирует еще один тайм-аут. Если вы видите 504 Gateway Timeoutошибку, вы можете настроить эту опцию.

Fish Monitor
источник
Прошло много времени с тех пор, как я беспокоился об этом, но разве это не то же самое в -tварианте, который у меня уже был в вопросе?
Мэтт Луонго
3

Это может быть проблема с вашей конфигурацией nginx. Вы настраивали значение proxy_read_timeout?

Эта директива устанавливает тайм-аут чтения для ответа прокси-сервера. Он определяет, как долго nginx будет ждать ответа на запрос. Тайм-аут устанавливается не для всего ответа, а только между двумя операциями чтения.

Источник: http://wiki.nginx.org/HttpProxyModule#proxy_read_timeout

Грег К
источник
Я только что перешел на больший / более быстрый сервер для разработки ($$ :(), но если это произойдет снова, я проверю ваше предложение!
Мэтт Луонго