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

Google Cloud Run缩容后扩容时为何不执行启动探针?

问题描述

我用Rust开发了一个部署在Google Cloud Run Docker容器中的服务端,核心逻辑如下:

  • 接收低频请求后立即返回200状态码确认
  • 异步执行后台任务,任务完成后发送回调请求
  • 所有后台任务排队串行执行
  • 任务运行期间,服务端会主动请求自身的/ping端点以维持实例存活,避免Cloud Run将实例缩容至0
  • 收到SIGINT信号时立即退出,该流程在测试阶段表现正常
Cloud Run配置
  • 容器命令:./server
  • 容器参数:--port 8080
  • 启动CPU增强:关闭
  • 持续分配CPU:开启
  • 执行环境:第二代
  • 最小实例数:0
  • 最大实例数:1
  • 健康检查:默认TCP端口8080启动探针
异常现象

部署初期扩缩容流程正常,但闲置数小时后收到新请求时,实例无法从0正常扩容至1:

  • 正常启动时,日志会显示启动探针成功等信息
  • 闲置后扩容时,日志仅记录POST请求和Container terminated on signal 4
  • POST请求返回503服务不可用,必须重新部署才能恢复,数小时后问题会再次出现
排查疑点
  • 无法理解为何触发SIGILL信号(信号4),且启动探针未执行
  • 后台任务会使用AVX2和AVX512指令,但程序已做运行时平台支持性检查
  • 服务端未输出请求处理前就会打印的Monitor thread started.日志
未尝试的解决方案
  1. 切换至第一代实例
  2. 将TCP探针替换为HTTP探针
  3. 设置最小实例数为1以避免缩容
部署命令
gcloud run deploy my-service \
--image=europe-west2-docker.pkg.dev/my-service-398017/docker/my_service:${{ github.ref_name }} \
--region=europe-west2 \
--allow-unauthenticated \
--command=./server \
--args=--port,8080 \
--execution-environment=gen2 \
--min-instances=0 \
--max-instances=1 \
--cpu=8 \
--memory=4Gi \
--no-cpu-throttling

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 14:53:24