我为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.任何帮助将不胜感激.
这个问题是cross-post from ServerFault.
解决方法:
您是否直接连接至gunicorn?还是两者之间存在ngnix?如果我没记错的话,nginx中大约有90秒的超时.
顺便说一句,对于这种表现不佳的请求,通常有两种解决方案:
>缓存结果并获得cron作业以调用自定义django管理命令,该命令将进行计算并填充缓存.
>像celery这样的异步任务队列会进行实际计算,并且您会执行单独的请求以检查其是否准备就绪.