排解 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 錯誤的原因,以及具體的配額/限制。如果目前值高於限制值,表示系統超出限制。 由於系統限制無法修改,建議您採用下列最佳做法,減少並行作業的數量。

    以下列舉幾項最佳做法: