如何解决 gunicorn 关键工作者超时错误?

如何解决 gunicorn 关键工作者超时错误?

我使用 nginx 和 gunicorn 在两台服务器上托管我的网站,

两台服务器都具有相同版本的软件包,并且网站已成功托管,

但是在我的其中一台服务器中,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 网关错误

答案1

要解决此问题,请增加 Nginx 中的超时标志,

在 Nginx 中增加proxy_connect_timeoutproxy_read_timeout,可以在 nginx.conf 文件下的http指令中添加以下内容。它们默认为 60 秒。

代理连接超时300秒;

代理读取超时300秒;

重启 Nginx 服务器。参见nginx 超时文档

如果上述修复不起作用,则在 Gunicorn 配置中增加 Gunicorn 超时标志,默认 Gunicorn 超时为 30 秒。

--超时 90

Gunicorn 有关超时的文档

-t INT, --timeout INT 30 静默超过此秒数的工作者将被杀死并重新启动。

通常设置为 30 秒。只有当您确定同步工作进程会产生影响时,才应将其设置得更高。对于非同步工作进程,这仅意味着工作进程仍在通信,并且不受处理单个请求所需的时间长度的限制。

Gunicorn 关于 Worker 超时的文档

希望这能解决这个问题。

相关内容