本文档介绍了如何排查由 rateLimitExceeded
错误导致的 Compute Engine 并发操作限制问题。
如需帮助找出 rateLimitExceeded
错误的原因,请按以下问题排查步骤操作:
-
在 Google Cloud 控制台中,转到 Logs Explorer 页面:
如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。
如需过滤由 Compute Engine API 生成的错误日志,请在查询编辑器中输入以下日志记录查询。
log_id("cloudaudit.googleapis.com/activity") protoPayload.serviceName="compute.googleapis.com" protoPayload.response.error.code=403 protoPayload.status.message="Rate Limit Exceeded"
过滤后的错误日志应类似于以下内容:
"protoPayload":{ "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": { "message": "Rate Limit Exceeded" } "serviceName": "compute.googleapis.com", "methodName": "METHOD_NAME", ... ... "response": { "error": { "message": "Rate Limit Exceeded", "code": 403, "errors": [ { "message": "Rate Limit Exceeded", "reason": "rateLimitExceeded", "domain": "usageLimits" } ] }, "@type": "type.googleapis.com/error" }, "resourceLocation": { "currentLocations": [ "LOCATION" ] }, ... ...
错误详情包含以下值:
METHOD_NAME
:服务方法或操作的名称。对于 API 调用,此名称应该是 API 方法的名称。LOCATION
:资源的位置。这可以是区域、可用区或全球。例如,条目currentLocations: "us-central1"
(区域级)或currentLocations: "us-central1-a"
表示区域为"us-central1"
或currentLocations: "global"
。
从错误日志中找出关联的
methodName
值。此名称表示超出速率限制的 API 方法,例如:v1.compute.instances.stop
。在审核日志中找出相关位置。
检查
Concurrent operations per project
配额和限制。控制台
在 Google Cloud 控制台中,进入配额页面。
配额页面列出了项目的配额用量和限制。默认情况下,列表会将您用量最高的配额显示在最前面,便于您发现哪些资源用量有超出限制的风险。
如需过滤列表并查看任何特定配额的用量和限制,请在过滤条件字段中选择配额或指标。
例如,您可以按名称
Concurrent global operations per project operation type
选择配额,也可以选择Service: Compute Engine API
、type: System Limit
和关键字concurrent
来列出所有并发操作配额。过滤可提供并发配额的列表。在此列表中,您可以搜索受影响的配额。如需过滤特定操作的配额,请将维度添加到过滤条件查询,然后选择操作类型(在审核日志中显示为 methodName)。例如,选择
instances_stop
可查看instances.stop
操作的配额用量和限制。如需过滤特定区域的配额,请将维度添加到过滤条件查询,然后选择区域(在审核日志中显示为 currentLocations)。
例如,选择
us-central1
可查看us-central1
区域的配额用量和限制。您可以同时使用区域和操作类型过滤条件,查看特定区域中特定操作的配额用量和限制。
gcloud
您可以使用 Google Cloud CLI 查看并发操作配额的用量和限制。
如需使用此方法,请确保您已安装 Alpha 版命令组件。如果您使用 Cloud Shell 与 Google Cloud进行交互,则系统会为您安装 Google Cloud CLI。
如需查看操作配额,请使用以下命令:
gcloud alpha services quota list \ --service=compute.googleapis.com \ --consumer=projects/PROJECT_ID
将
PROJECT_ID
替换为您要查看其配额的项目的 ID。这些配额通常分为两种类别:
- 全球性或区域性
- 每个项目或每个项目每种操作类型
如需了解详情,请参阅并发操作配额组。
查看配额的用量图表。如果用量在错误日志记录期间接近或高于配额限制,则表示已超出配额或系统限制。
如需查看显示当前用量和峰值用量的图表,请前往相应配额,然后点击
监控。您可能需要向右滚动到表格末尾。监控图表可确认
rateLimitExceeded
错误的原因并显示特定配额/限制。如果当前值高于限制值,则表示已超出系统限制。由于系统限制无法修改,我们建议您遵循以下最佳实践来减少并发操作数量。以下是一些最佳实践:
- 等待操作完成
- 依赖于错误代码,而非错误消息
-
您可以使用以下任一方法来最大限度地减少重试次数: