Azure容器部署的FastAPI运行一段时间后失效,重启仍报错
解决方案
核心原因分析
这个超时错误并非FastAPI/Gunicorn的应用层问题,而是Azure容器服务的前端反向代理/网关超时,或是实例闲置后被系统回收导致的首次请求连接中断。错误日志中的HttpClient.Timeout是Azure网关的超时配置,和应用内部的超时设置无关。
具体解决步骤
1. 开启Azure容器服务的「始终开启」功能
若部署在Azure App Service(容器实例):
- 进入App Service配置页面,找到「常规设置」
- 开启「始终开启」选项,避免实例在闲置状态下被自动回收
- 调整「HTTP超时」参数,从默认值(通常230秒)延长至300秒以上,匹配错误日志中的超时阈值
2. 添加应用健康检查+配置Azure心跳探测
- 在FastAPI中新增健康检查接口:
from fastapi import FastAPI app = FastAPI() @app.get("/health") async def health_check(): return {"status": "healthy"}
- 进入Azure容器服务的健康探测配置页,设置探测路径为
/health,探测间隔设为5分钟以内,确保系统持续判定实例处于活跃状态
3. 优化Gunicorn连接参数
修改Dockerfile中的启动命令,补充超时与保活配置:
CMD ["gunicorn", "main:app", "--workers", "4", "--worker-class", "uvicorn.workers.UvicornWorker", "--bind", "0.0.0.0:80", "--timeout", "300", "--keep-alive", "60", "--max-requests", "1000"]
--timeout 300:设置Worker进程超时时间,对齐Azure网关的超时配置--keep-alive 60:延长TCP连接保活时长,避免闲置连接被过早关闭--max-requests 1000:定期重启Worker进程,防止长期运行导致的连接泄漏或内存累积问题
4. 排查Azure网络层超时限制
若使用Azure Container Instances(ACI),检查虚拟网络的NAT超时设置,确保TCP连接的闲置超时大于请求超时阈值;若为App Service,确认VNet集成的网络规则未限制长连接。
验证方式
修改配置后,让应用闲置20分钟以上,再发起请求验证是否仍出现超时错误。同时查看Azure应用日志,确认健康探测任务正常执行。
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

