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

Cloud Run突发请求超时求助:重启部署恢复但频繁复发

Cloud Run Python/Flask应用随机全量504超时排查方案

问题背景

我们在Cloud Run上运行Python+Flask后端应用已1.5年,1个月前开始每几天随机出现所有请求504超时的异常:

  • 应用能接收请求但完全不执行代码,甚至无业务逻辑的Hello World测试端点也超时
  • 仅重新部署最新镜像可恢复服务
  • 已排除Cloud SQL影响:无数据库交互的请求同样失效,故障期间Cloud SQL可正常访问

当前Cloud Run配置:

  • CPU: 2核
  • Memory: 8Gi
  • Timeout: 59m59s
  • 启用VPC连接器
  • VPC egress: private-ranges-only
  • Concurrency: 100

故障关联现象

  • Logs Explorer仅显示504超时日志,无应用侧执行日志(多数端点触发会生成日志,确认代码未执行)
  • 故障似乎集中在Cloud Scheduler任务运行期间:每15分钟触发的Scheduler任务会调用应用端点创建Cloud Tasks(指向同一应用),某次21:00触发的Scheduler因3分钟默认超时终止,其创建的Cloud Tasks在21:10因10分钟默认超时失效,之后所有请求均超时
  • 已尝试的无效操作:增加Cloud Scheduler重试次数与超时时间、升级CPU/内存

排查方向与解决方案

1. 检查应用进程级阻塞/资源耗尽

  • 在应用中集成psutil库,实时记录每个请求的线程数、文件句柄数、内存占用,故障发生后导出数据分析是否存在资源耗尽或死锁
  • 开启Cloud Run的CPU/内存利用率监控,查看故障发生前是否出现资源突增但未触发自动扩缩容的情况
  • 核对Flask的WSGI服务器配置(如Gunicorn的worker数、线程数),是否因并发设置不合理导致进程池被占满

2. 排查VPC连接器网络瓶颈

  • 检查VPC连接器的连接数配额,故障期间是否达到连接上限:Cloud Run通过VPC连接器访问内部资源时,连接数超限会导致请求挂起
  • 确认private-ranges-only策略下,应用依赖的所有服务(包括Cloud Tasks回调)是否都在私有网段内,若有公网依赖需调整VPC egress策略或配置云NAT
  • 查看VPC连接器的日志,排查是否存在DNS解析失败、连接超时的记录

3. 验证Cloud Tasks与Scheduler的连锁影响

  • 临时暂停Cloud Scheduler任务,观察是否还会出现故障,以此确认Scheduler是否为故障诱因
  • 调整Cloud Tasks的并发设置,避免大量任务同时触发同一应用端点导致实例并发队列溢出
  • 给Cloud Tasks配置死信队列,防止失败任务持续占用资源

4. 排查Cloud Run平台层面异常

  • 查看Cloud Run的实例启动/销毁日志,确认故障期间是否存在实例无法正常启动或被强制终止的情况
  • 提交Google Cloud支持工单,提供故障精确时间戳、项目ID,请求排查平台侧的实例调度或网络异常
  • 尝试切换Flask的WSGI服务器(如从Gunicorn切换到Waitress),排除服务器与Cloud Run的兼容性问题

5. 排查应用代码隐性阻塞点

  • 检查是否存在全局锁、单例资源未正确释放的情况(如全局数据库连接池、文件锁),高并发下可能导致所有请求阻塞
  • 给测试端点添加最基础的入口日志(如请求到达时直接打印日志),确认请求是否真的到达应用进程,还是在Cloud Run代理层被阻塞

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:30:53