You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:27:42