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

Google Cloud Run Gen2函数偶发30秒超时问题求助

问题描述

我通过Firebase Hosting将请求重定向至Cloud Functions,代码无变更,但部分请求会触发30秒超时。多数情况下服务运行正常,偶尔会出现连续超时日志,且CPU、内存资源及实例状态均显示健康。


Firebase.json配置

{
  "site": "xxxx",
  "public": "public/xxxx/",
  "rewrites": [
    {
      "source": "/api{,/**}",
      "function": "api",
      "region": "me-west1",
      "pinTag": true     
    }
  ],
  "headers": [
      {
        "source": "/{api,v1}/**",
        "headers": [
          { "key": "Access-Control-Allow-Origin", "value": "*" },
          { "key": "Access-Control-Allow-Methods", "value": "GET, POST, OPTIONS, PUT, DELETE" },
          { "key": "Access-Control-Allow-Headers", "value": "Authorization, Content-Type" }
        ]
      }
    ]
}

Cloud Functions函数配置

exports.api = onRequest({
    timeoutSeconds:30,
    cpu:2,
    memory: "4GiB",
    minInstances:0,
    concurrency:5,
    maxInstances:30,
    region: "me-west1", //europe-central2
    invoker: ["public"],
    cors: {
      origin: true, // or ["https://myapp.com", "http://localhost:3000"]
      methods: ["GET", "POST", "OPTIONS","DELETE","PUT"],
      allowedHeaders: ["Content-Type", "Authorization"],
      //credentials: true
    }
  }, api);

Express业务代码

const app = express();
app.set('trust proxy', 1);
app.all("*", (req, res, next) => {
  if (req.method === "OPTIONS") {
    res.set({
      "Access-Control-Allow-Origin": "*",
      "Access-Control-Allow-Methods": "GET,POST,OPTIONS",
      "Access-Control-Allow-Headers": "Authorization,Content-Type"
    });
    return res.sendStatus(204);
  }
  next();
});
app.use(express.json());
const router = express.Router();
router.use("/orders", OrdersApi);
router.get("/", async (req, res) => {
    res.json("ok");
});

app.use('/', router);
module.exports = app;

相关监控截图

  • 截图1:无异常状态
    ![无异常状态截图]
  • 截图2:请求持续超时状态
    ![请求持续超时截图]
  • 截图3:部分请求成功、部分超时状态
    ![请求部分成功部分超时截图]
    ![请求部分成功部分超时截图]

排查方向与解决方案

  1. 冷启动延迟优化
    当前minInstances:0,长时间无请求后实例会销毁,新请求触发冷启动时初始化时间可能逼近30秒超时阈值。建议将minInstances设为1-2,维持常驻实例避免冷启动。

  2. 并发配置调整
    concurrency:5意味着每个实例同时处理5个请求,若OrdersApi包含耗时操作(如数据库查询、第三方API调用),易导致请求队列阻塞。可尝试调高concurrency至10-15,或排查OrdersApi中异步逻辑是否存在未优化的阻塞点。

  3. 区域与重定向层检查
    确认me-west1区域是否存在临时网络波动,可尝试切换到注释中提及的europe-central2区域,同时检查Firebase重定向规则是否存在匹配异常。

  4. 扩容阈值调整
    请求突增时maxInstances:30可能不足,导致请求排队等待实例启动最终超时。可适当调高maxInstances,结合自动扩缩容策略缓解压力。

  5. CORS配置统一
    目前Firebase headers、函数配置、Express中间件三处均配置CORS,可能存在冲突导致预请求(OPTIONS)处理延迟。建议保留Cloud Functions的cors配置统一管理,删除Express中的OPTIONS处理中间件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 04:05:01