docker 带有gunicorn/uvicorn的FastApi停止响应

rta7y2nd  于 2023-03-07  发布在  Docker
关注(0)|答案(1)|浏览(664)

我目前使用FastApiGunicorn/Uvicorn作为我的服务器引擎。
我正在为Gunicorn使用以下配置:

TIMEOUT 0
GRACEFUL_TIMEOUT 120
KEEP_ALIVE 5
WORKERS 10
    • Uvicorn**具有所有默认设置,并在Docker容器中随意启动:
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

所有东西都装在码头集装箱里。

    • 问题如下:**

一段时间后(大约1天到1周,取决于负载)我的应用停止响应(即使是简单的curl http://0.0.0.0:8000命令也会永远挂起). Docker容器保持工作,日志中没有应用程序错误,也没有连接问题,但我的员工都没收到请求(所以我从来没有得到我的回应)。似乎我的请求在服务器引擎和我的应用程序之间的某个地方丢失了。有什么办法可以解决这个问题吗?

    • UPDATE**:我已经成功地使用自定义locusload profile:

      重现了此行为场景如下:

1.在前15分钟内增加到50个用户(其中30个用户将以1 rps发送需要GPU的请求,20个用户将以10 rps发送不需要GPU的请求)
1.再工作4小时如图所示,大约30分钟后API停止响应。(输出中仍然没有错误消息/警告)

PID TTY          TIME CMD
    120 pts/0    00:00:00 bash
    134 pts/0    00:00:00 ps

这意味着我的Gunicorn服务器应用程序只是默默地关闭了。而且在应用程序目录中还有一个名为core的二进制文件,这显然意味着有东西崩溃了

hm2xizp9

hm2xizp91#

内存不足错误(OOM),泄漏是elastic apm中间件造成的,我把它去掉了,泄漏消失了。

相关问题