我用nginx和gunicorn来托pipe我的网站在两台服务器上,
两台服务器都有相同版本的软件包,网站成功托pipe,
但在我的一个服务器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。 而当我得到这个错误,我从Nginx得到504网关错误
为了解决这个问题,在Nginx中增加了超时标志,
在Nginx中增加proxy_connect_timeout和proxy_read_timeout,你可以在nginx.conf文件中添加以下内容
proxy_connect_timeout 300s;
proxy_read_timeout 300s;
重新启动Nginx服务器
如果上述修正不起作用,则在Gunicornconfiguration中增加Gunicorn超时标志,默认Gunicorn超时为30秒。
– 超过90
Gunicorn有关超时的文档
-t INT,–timeout INT 30工作人员沉默了超过这么多秒,就被杀死并重新启动。
一般设定为三十秒。 如果你确定同步工作人员的影响,只有把这个设置得更高一些。 对于非同步工作者来说,这意味着工作者进程仍在进行通信,并且不受处理单个请求所需时间的限制。
关于工人超时的Gunicorn Docs
希望这能解决它。