我已经设置了gunicorn与3个工人,30个工人连接和使用eventlet工人类。它被设置在Nginx后面。每请求几次,我就会在日志里看到这个。

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

为什么会这样?我怎样才能知道哪里出了问题呢?


当前回答

超时是这个问题的一个关键参数。

然而,它不适合我。

当我设置workers=1时,我发现没有gunicorn超时错误。

当我看我的代码,我发现一些套接字连接(套接字。在服务器init中发送& socket.recv)。

套接字。Recv将阻塞我的代码,这就是为什么它总是超时时,工人>1

希望能给那些对我有意见的人一些建议

其他回答

使用——log-level debug运行Gunicorn。

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

关于在Azure应用服务(Linux应用)上运行Flask Apps的Microsoft Azure官方文档声明超时时间为600

gunicorn --bind=0.0.0.0 --timeout 600 application:app

https://learn.microsoft.com/en-us/azure/app-service/configure-language-python#flask-app

我在Docker中也遇到了同样的问题。

在Docker中,我保持训练过的LightGBM模型+ Flask服务请求。作为HTTP服务器,我使用gunicorn 19.9.0。当我在我的Mac笔记本电脑上本地运行我的代码时,一切都很完美,但当我在Docker中运行应用程序时,我的POST JSON请求冻结了一段时间,然后gunicorn工人已经失败了[CRITICAL]工人超时异常。

我尝试了大量不同的方法,但唯一解决我的问题的是添加worker_class=gthread。

以下是我的完整配置:

import multiprocessing

workers = multiprocessing.cpu_count() * 2 + 1
accesslog = "-" # STDOUT
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(q)s" "%(D)s"'
bind = "0.0.0.0:5000"
keepalive = 120
timeout = 120
worker_class = "gthread"
threads = 3

对我来说,解决方案是在我的入口点上添加——timeout 90,但它不起作用,因为我定义了两个入口点,一个在app.yaml中,另一个在Dockerfile中。我删除了未使用的入口点,并在另一个入口点添加了——timeout 90。

会是这样吗? http://docs.gunicorn.org/en/latest/settings.html#timeout

其他的可能是你的回复时间太长或者被困在等待中。