如何在Google Cloud Run上触发503 Service Unavailable错误
复现Cloud Run hello-world容器503错误&查看get API状态方法
一、触发503错误的两种可行方案(无需添加健康检查)
- 方案1:直接调整实例上限(零成本快速复现)
操作步骤:- 进入对应Cloud Run服务的「修订版」设置页面,将
最大实例数调整为0并保存部署 - 此时所有访问服务域名的请求会直接返回
503 Service Unavailable,无需压测、无需修改容器配置 - 测试完成后把最大实例数改回原有数值即可恢复服务
- 进入对应Cloud Run服务的「修订版」设置页面,将
- 方案2:压测触发过载返回503(模拟真实场景的服务不可用)
你之前压测没触发是因为Cloud Run默认存在请求排队机制,请求会先进入队列等待实例处理,不会直接返回503,调整对应配置即可:- 服务配置保持
最大实例数=1、最小实例数=0、单实例并发数=1不变,额外将「最大排队请求数」调整为1 - 不要用Python多进程发请求,换成并发压测工具
ab或者wrk,执行压测命令(以ab为例):ab -n 1000 -c 20 你的Cloud Run服务域名/ - 20并发请求超过了实例处理能力+队列上限,会直接返回503错误
- 服务配置保持
二、查看get public API状态的方法
你不需要直接调用公开API接口,用gcloud命令行工具即可验证状态,gcloud底层就是调用该get API执行查询:
- 执行命令:
gcloud run services describe [你的服务名称] --region [服务部署区域] - 命令正常返回服务配置信息则对应get API状态正常(返回状态码200),如果命令返回报错,可通过添加
--log-http参数查看具体的API返回状态码 - 如果需要直接验证API返回,可执行以下curl命令:
TOKEN=$(gcloud auth print-access-token) curl -I -H "Authorization: Bearer $TOKEN" https://run.googleapis.com/v1/projects/[你的项目ID]/locations/[服务部署区域]/services/[你的服务名称]
返回头部的状态码就是该get API的响应状态
内容的提问来源于stack exchange,提问作者john mich
相关产品推荐
相关产品推荐

