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

部署在AWS负载均衡器后的FastAPI应用流式传输负载时连接中断排查

问题分析:FastAPI在Fargate+ALB环境下出现ClientDisconnect错误

端点代码

@app.post("/api/.../")
async def overall_flow(request: Request):
    data: dict = await request.json()
    ...

错误日志

August 25, 2023 at 16:02 (UTC+2:00) data: dict = await request.json()   backend-api
August 25, 2023 at 16:02 (UTC+2:00) File "/app/.venv/lib/python3.10/site-packages/starlette/requests.py", line 243, in json backend-api
August 25, 2023 at 16:02 (UTC+2:00) body = await self.body()    backend-api
August 25, 2023 at 16:02 (UTC+2:00) File "/app/.venv/lib/python3.10/site-packages/starlette/requests.py", line 236, in body backend-api
August 25, 2023 at 16:02 (UTC+2:00) async for chunk in self.stream():   backend-api
August 25, 2023 at 16:02 (UTC+2:00) File "/app/.venv/lib/python3.10/site-packages/starlette/requests.py", line 230, in stream   backend-api
August 25, 2023 at 16:02 (UTC+2:00) raise ClientDisconnect()    backend-api
August 25, 2023 at 16:02 (UTC+2:00) starlette.requests.ClientDisconnect

可能的原因分析

  • 客户端主动断开连接:大负载请求体数据量较大,传输耗时久,若调用方(前端/第三方服务)设置的请求超时时间过短,会在请求完成前主动终止连接,触发该错误。
  • ALB超时配置限制:AWS ALB默认空闲连接超时为60秒,HTTP/HTTPS请求超时默认也为60秒。如果大负载请求的传输或处理时间超过该阈值,ALB会主动断开与后端Fargate任务的连接,导致Starlette抛出ClientDisconnect。需检查ALB的Idle timeout和Request timeout配置是否匹配业务需求。
  • Fargate资源不足:大负载到来时,Fargate任务分配的CPU/内存资源不足以支撑请求处理,导致请求体读取过程被阻塞,处理延迟飙升,最终触发客户端或ALB的超时断开。可查看CloudWatch中Fargate任务的CPU、内存使用率指标,确认是否存在资源瓶颈。
  • 异步事件循环阻塞:FastAPI基于Starlette异步框架,若请求处理逻辑中有同步阻塞操作(如耗时CPU计算、同步IO调用),会占用事件循环线程,导致无法及时读取请求体后续数据,连接因长时间无响应被断开。
  • 网络层面问题:VPC内网络带宽瓶颈、ENI(弹性网络接口)吞吐量限制,会导致大负载下数据传输卡顿、数据包丢失,最终引发连接中断。另外,安全组或NACL的规则若存在不合理的超时或拦截设置,也可能导致连接意外断开。

内容的提问来源于stack exchange,提问作者Sven

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:18:39