2012-06-01 49 views
93

我设置了3名工人的工人连接并使用了eventlet工人类的gunicorn。它设置在Nginx后面。在每隔几个请求之后,我会在日志中看到它。Gunicorn工人超时错误

[ERROR] gunicorn.error: WORKER TIMEOUT (pid:23475) 
None 
[INFO] gunicorn.error: Booting worker with pid: 23514 

为什么会发生这种情况?我怎样才能弄清楚什么是错误的?

感谢

+1

你是能够解决问题的入口点?请分享您的想法,因为我也坚持。 'Gunicorn == 19.3.1'和'gevent == 1.0.1' –

+1

找到它的解决方案。增加超时到非常大的值,然后我能够看到堆栈跟踪 –

回答

10

运行Gunicorn与--log-level=DEBUG

它应该给你一个应用程序堆栈跟踪。

+36

它不在我的情况。 – Joe

+7

它现在是'--log级调试' – psychok7

+1

我很想得到一个stracktrace,但他们都不在这里工作,使用gunicorn 19.4.5。调试的东西显示,所以我猜标志被识别,但没有超时堆栈跟踪。 – orzel

5

您需要使用的其他工人类型的类异步一个像GEVENT龙卷风看到本作更多的解释: 首先explantion:

您可能还希望如果安装Eventlet或GEVENT您希望您的应用程序代码可能需要请求处理期间暂停长时间

第二个:

默认的同步工作者假定您的应用程序在CPU和网络带宽方面是资源绑定的。通常这意味着你的应用程序不应该做任何需要不确定时间的事情。例如,对互联网的请求符合这个标准。在某些时候,外部网络将会以客户端堆积在您的服务器上的方式失败。

75

我们在使用Django + nginx + gunicorn时遇到了同样的问题。从Gunicorn文档中我们已经配置了几乎没有区别的优雅超时。

经过一番测试,我们发现解决方案,要配置的参数是:timeout(而不是优雅超时)。它就像一个时钟..

所以,千万:

1)打开gunicorn配置文件

2)将超时设置为你需要什么都 - 值处于秒

NUM_WORKERS=3 
TIMEOUT=120 

exec gunicorn ${DJANGO_WSGI_MODULE}:application \ 
--name $NAME \ 
--workers $NUM_WORKERS \ 
--timeout $TIMEOUT \ 
--log-level=debug \ 
--bind=127.0.0.1:9000 \ 
--pid=$PIDFILE 
+5

谢谢这是正确的答案。然后,为了节省许多并发连接的资源:'pip install gevent' ,然后在你的配置文件中加入'worker_class gevent'或在命令行中加入'-k gevent'。 –

+1

使用gevent解决了我的问题。 – LiberiFatali

3

我有非常类似的问题,我也使用“的runserver”,看看我能找到任何尝试,但我不得不是一个讯息Killed

所以余吨这可能是资源问题,我继续为实例提供更多内存,并且它工作正常。

+0

即使使用gevent,我也看到了这个问题,并且超时设置正确,内存不足是问题所在 – bcattle

2

在谷歌云 只需添加--timeout 90app.yaml

entrypoint: gunicorn -b :$PORT main:app --timeout 90