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:部分请求成功、部分超时状态
![请求部分成功部分超时截图]
![请求部分成功部分超时截图]
排查方向与解决方案
冷启动延迟优化
当前minInstances:0,长时间无请求后实例会销毁,新请求触发冷启动时初始化时间可能逼近30秒超时阈值。建议将minInstances设为1-2,维持常驻实例避免冷启动。并发配置调整
concurrency:5意味着每个实例同时处理5个请求,若OrdersApi包含耗时操作(如数据库查询、第三方API调用),易导致请求队列阻塞。可尝试调高concurrency至10-15,或排查OrdersApi中异步逻辑是否存在未优化的阻塞点。区域与重定向层检查
确认me-west1区域是否存在临时网络波动,可尝试切换到注释中提及的europe-central2区域,同时检查Firebase重定向规则是否存在匹配异常。扩容阈值调整
请求突增时maxInstances:30可能不足,导致请求排队等待实例启动最终超时。可适当调高maxInstances,结合自动扩缩容策略缓解压力。CORS配置统一
目前Firebase headers、函数配置、Express中间件三处均配置CORS,可能存在冲突导致预请求(OPTIONS)处理延迟。建议保留Cloud Functions的cors配置统一管理,删除Express中的OPTIONS处理中间件。
内容的提问来源于stack exchange,提问作者Burak
相关产品推荐
相关产品推荐

