首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在上运行的FastAPI服务器在24小时后失败

在上运行的FastAPI服务器在24小时后失败
EN

Stack Overflow用户
提问于 2022-01-06 18:21:18
回答 1查看 812关注 0票数 3

我有一个用Gunicorn配置的FastAPI服务器,部署在App上。但是,当我尝试访问端点时,在24小时后,当我尝试访问同一个端点时,我会得到一个502错误的网关错误,在此之后cloudWatch上不会出现任何登录,直到我重新部署应用程序,然后它又开始正常工作了。

我怀疑这与我的Gunicorn配置本身有关,它在一段时间后以某种方式关闭了我的API,而不是AWS应用程序运行程序,但我没有找到任何解决方案。我还展示了我的Gunicorn设置在下面。如有任何问题,我们将不胜感激。

代码语言:javascript
运行
复制
from fastapi import FastAPI
import uvicorn
from fastapi.middleware.cors import CORSMiddleware
from gunicorn.app.base import BaseApplication
import os
import multiprocessing

api = FastAPI()


def number_of_workers():
    print((multiprocessing.cpu_count() * 2) + 1)
    return (multiprocessing.cpu_count() * 2) + 1


class StandaloneApplication(BaseApplication):
    def __init__(self, app, options=None):
        self.options = options or {}
        self.application = app
        super().__init__()

    def load_config(self):
        config = {
            key: value for key, value in self.options.items()
            if key in self.cfg.settings and value is not None
        }
        for key, value in config.items():
            self.cfg.set(key.lower(), value)

    def load(self):
        return self.application


@api.get("/test")
async def root():
    return 'Success'


if __name__ == "__main__":
    if os.environ.get('APP_ENV') == "development":
        uvicorn.run("api:api", host="0.0.0.0", port=2304, reload=True)

    else:
        options = {
            "bind": "0.0.0.0:2304",
            "workers": number_of_workers(),
            "accesslog": "-",
            "errorlog": "-",
            "worker_class": "uvicorn.workers.UvicornWorker",
            "timeout": "0"
        }

        StandaloneApplication(api, options).run()
EN

Stack Overflow用户

回答已采纳

发布于 2022-01-22 02:24:22

我也有同样的问题。经过大量的尝试和错误,两个改变似乎解决了这个问题。

  1. 将uvicorn --timeout-keep-alive设为65。对于金牛来说,这是--keep-alive。如果uvicorn在ALB之前关闭tcp套接字,则应用程序负载均衡器将抛出502。

  1. 将应用程序运行状况检查更改为使用HTTP而不是TCP来管理容器回收。目前,AWS不允许您进行此更改。您必须使用aws来完成这个任务。使用任何活动的URL路径进行ping签入--在您的情况下是/test

aws apprunner update-service --service-arn <arn> --health-check-configuration Protocol=HTTP,Path=/test

第二种可能就足以解决这个问题。

票数 6
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70611806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档