我使用 nginx 和 gunicorn 在两台服务器上托管我的网站,
两台服务器具有相同版本的软件包并且网站已成功托管,
但是在我的其中一台服务器中,gunicorn 总是超时并且出现错误
[CRITICAL]Worker Timeout
Booting worker with pid
Worker cannot boot with pid
Run Code Online (Sandbox Code Playgroud)
在此之后,我在网页中收到 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
Run Code Online (Sandbox Code Playgroud)
我得到这样的连续错误,
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
Run Code Online (Sandbox Code Playgroud)
工人又开始工作,
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
Run Code Online (Sandbox Code Playgroud)
再次忽略 EPIPE 错误,这种情况一直持续到我重新启动 gunicorn。当我收到此错误时,我从 nginx 收到 504 网关错误
小智 43
要解决此问题,请在 Nginx 中增加超时标志,
在Nginx增加proxy_connect_timeout和proxy_read_timeout,你可以在nginx.conf文件中的http指令下添加以下内容。它们默认为 60 秒。
proxy_connect_timeout 300s;
proxy_read_timeout 300s;
重启 Nginx 服务器。请参阅有关超时的 nginx 文档。
如果上述修复不起作用,则在 Gunicorn 配置中增加 Gunicorn 超时标志,默认 Gunicorn 超时为 30 秒。
--超时 90
关于超时的 Gunicorn 文档
-t INT, --timeout INT 30 工人沉默超过这么多秒被杀死并重新启动。
一般设置为三十秒。如果您确定对同步工作者的影响,则仅将此设置明显更高。对于非同步工作人员,这仅意味着工作进程仍在通信,并且与处理单个请求所需的时间长度无关。
希望这能解决它。
| 归档时间: |
|
| 查看次数: |
91413 次 |
| 最近记录: |