使用Gunicorn + Nginx的长期运行请求


8

我为Django驱动的应用程序集成了一个集成服务器。其中一些功能仍处于试验阶段,导致请求时间过长。

我暂时可以接受糟糕的表现,但是我需要能够集成。每当我们使用导致较长请求的功能时,该应用都会挂起(按预期方式),然后可能在一分半钟后返回“ 502-错误的网关”。该应用程序的其余部分工作正常。

我检查了古尼康日志,每当发生这种情况时,我都会收到一条类似

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

我正在运行0.13.4版的gunicorn。任何帮助将不胜感激。

Answers:


5

502 Bad Gateway表示您的Gunicorn工作者超时。您可以--timeoutgnuicorn命令中添加选项。默认值为30秒。

如@ greg-k所述,proxy_read_timeoutNginx的选项控制了另一个超时。如果看到504 Gateway Timeout错误,可以调整此选项。


自从我担心这个问题以来已经有一段时间了,但是- -t我在问题中已经拥有的选项不是吗?
Matt Luongo

3

这可能与您的nginx配置有关。您是否配置了proxy_read_timeout值?

此伪指令设置代理服务器响应的读取超时。它确定nginx将等待多长时间以获取对请求的响应。超时不是针对整个响应而建立的,而是仅在两次读取操作之间建立的。

来源:http//wiki.nginx.org/HttpProxyModule#proxy_read_timeout


我只是搬到更大/更快的服务器上进行开发($$ :(),但是如果再次出现,我将测试您的建议!
Matt Luongo 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.