排解 Compute Engine 並行作業配額問題


本文說明如何排解 rateLimitExceeded 錯誤導致的 Compute Engine 並行作業限制問題。

如要找出 rateLimitExceeded 錯誤的原因,請按照下列疑難排解步驟操作:

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面:

    前往「Logs Explorer」(記錄檔探索工具)

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果

  2. 如要篩選 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"

  3. 從錯誤記錄中找出相關聯的 methodName 值。這個名稱代表超出使用頻率限制的 API 方法,例如:v1.compute.instances.stop

  4. 在稽核記錄中找出相關位置。

  5. 檢查 Concurrent operations per project 配額與限制。

    主控台

    1. 前往 Google Cloud 控制台的「Quotas」(配額) 頁面。

      前往配額頁面

      「配額」頁面會列出專案的配額用量和限制。 根據預設,清單會依照您最常用的配額進行排序,方便您查看有超過上限之虞的項目。

    2. 如要篩選清單,並查看任何特定配額的使用量和限制,請在「Filter」(篩選器) 欄位中選取「Quota」(配額) 或「Metric」(指標)

      舉例來說,您可以選取名為 Concurrent global operations per project operation type 的配額,也可以選取 Service: Compute Engine APItype: System Limit 和關鍵字 concurrent,列出所有並行作業配額。篩選條件會提供並行配額清單。您可以在這份清單中搜尋受影響的配額。 如要篩選特定作業的配額,請將「維度」新增至篩選查詢,然後選取「operation_type」 (在稽核記錄中顯示為「methodName」)。

      舉例來說,選取 instances_stop 即可查看作業 instances.stop 的配額用量和限制。

      如要篩選特定區域的配額,請在篩選查詢中新增「維度」,並選取「區域」 (稽核記錄中顯示為「currentLocations」)。

      舉例來說,選取 us-central1 即可查看 us-central1 區域的配額用量和限制。

      您可以同時使用「region」和「operation_type」篩選器,查看特定區域中特定作業的配額用量和限制。

    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。

    這些配額通常分為兩類:

    • 全域或區域
    • 每項專案或每項專案每種作業類型

    詳情請參閱「並行作業配額群組」。

  6. 查看配額的使用量圖表。如果錯誤記錄期間的用量接近或超過配額限制,表示已超出配額或系統限制。

    如要查看顯示目前和尖峰用量的圖表,請前往配額,然後按一下「監控」。你可能需要向右捲動至表格結尾。

    監控圖表會顯示 rateLimitExceeded 錯誤的原因,以及具體的配額/限制。如果目前值高於限制值,表示系統超出限制。 由於系統限制無法修改,建議您採用下列最佳做法,減少並行作業的數量。

    以下列舉幾項最佳做法: