启动时在Docker中运行Gunicorn Flask应用程序[CRITICAL] WORKER TIMEOUT

时间:2019-12-04 18:58:26

标签: docker flask gunicorn

我想在Docker中运行带有gunicorn的Flask Web服务应用程序。启动后,该应用会加载大型机器学习模型。

但是,当我在Docker中运行gunicorn时,我收到了以下超时信息,并且一直在催生工人。

[2019-12-12 21:52:42 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:1198) 
[2019-12-12 21:52:42 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:1204)
[2019-12-12 21:52:42 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:1210)
[2019-12-12 21:52:42 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:1211)
[2019-12-12 21:52:42 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:1222)
[2019-12-12 21:52:42 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:1223)
[2019-12-12 21:52:42 +0000] [1264] [INFO] Booting worker with pid: 1264
[2019-12-12 21:52:42 +0000] [1265] [INFO] Booting worker with pid: 1265
[2019-12-12 21:52:42 +0000] [1276] [INFO] Booting worker with pid: 1276
[2019-12-12 21:52:42 +0000] [1277] [INFO] Booting worker with pid: 1277
[2019-12-12 21:52:42 +0000] [1278] [INFO] Booting worker with pid: 1278
[2019-12-12 21:52:42 +0000] [1289] [INFO] Booting worker with pid: 1289

在Docker中将其作为烧瓶应用程序运行,或者在命令行中使用(或不使用)gunicorn运行烧瓶应用程序都可以正常工作。如果我删除了机器学习模型,它也适用于gunicorn。

例如:

$python app.py

$gunicorn -b 0.0.0.0:8080 --workers=2 --threads=4 app:app

$gunicorn app:app

这是我在Flask开发服务器上的Dockerfile。工作良好。

ADD . /app
WORKDIR /app
RUN pip install -r requirements.txt
CMD python app.py

如果我按照以下方式经营枪械,它将继续催生工人:

CMD gunicorn -b 0.0.0.0:8080 --workers=2 --threads=4 app:app
or
CMD ["gunicorn", "app:app"]

gunicorn具有--timeout = 30参数。默认值为30秒,而我增加到300秒。这似乎没有影响。

注意:我为Starlette库重写了该应用程序,并收到了相同的结果!

任何指导表示赞赏。

谢谢, 杰伊

2 个答案:

答案 0 :(得分:0)

我需要添加gunicorn --timeout如下:

CMD gunicorn --timeout 1000 --workers 1 --threads 4 --log-level debug --bind 0.0.0.0:8000 app:app

我还遇到了在Google Cloud Platform上部署的问题。日志仅显示一条终止消息。在计算实例中增加内存可以解决该问题。

答案 1 :(得分:0)

试试这个 CMD["gunicorn", "--timeout", "1000", "--workers=1","-b", "0.0.0.0:8000","--log-level", "debug", "manage"]