504 閘道逾時 - 目標讀取逾時

您目前查看的是 ApigeeApigee Hybrid 說明文件。
這個主題沒有對應的 Apigee Edge 說明文件。

問題

這個問題會顯示為 Gateway Timeout 錯誤,並附上 HTTP 狀態 504

錯誤訊息

您可能會在 API 監控偵錯或其他工具中看到這項錯誤。TARGET_READ_TIMEOUT 原因表示 Apigee 執行階段在執行要求期間,未及時收到目標的回應。

預設目標讀取逾時值 (io.timeout.millis) 為 55 秒。也就是說,如果目標在 55 秒後未回應,Apigee 會擲回這項錯誤:

{"fault":{"faultstring":"Gateway Timeout",
  "detail":{"errorcode":"messaging.adaptors.http.flow.GatewayTimeout",
  "reason":"TARGET_READ_TIMEOUT"}}}

可能原因

原因 說明 適用於以下裝置的疑難排解說明
目標速度緩慢 目標未及時產生回應。 Apigee X 和 Apigee Hybrid
TargetServer 連線問題 當 TargetEndpoint 上設定 <LoadBalancer> 時,目標發生一般連線問題。 Apigee X 和 Apigee Hybrid

原因:目標速度緩慢

診斷

您可以使用 Apigee Debug Tool 診斷目標速度緩慢的問題:

  1. 為 API Proxy 建立偵錯工作階段
  2. 在偵錯工作階段中傳送要求,並檢查偵錯輸出內容。

如上例所示,目標要求超過 55 秒,也就是預設目標逾時限制。時間限制可供設定,如果您已變更逾時時間,目標要求的時間長度就會與您設定的逾時時間相符。舉例來說,如果逾時時間為 10 秒,則目標要求會在 10 秒後逾時。這類「目標速度緩慢」的行為清楚指出,目標未及時回應要求。

解析度

Apigee 建議您避免使用速度緩慢的目標。 舉例來說,如果正常目標延遲時間為 50 毫秒,但您遇到 55000 毫秒的延遲時間,可能需要調查目標是否有問題。

如必須延長逾時時間,請按照下列步驟操作:

  1. 在 Proxy 編輯器中,點選「Develop」分頁標籤。
  2. 在導覽窗格中,選取受影響的目標端點。
  3. 在 XML 編輯器中,找出 HTTPTargetConnection XML 元素:

  4. <HTTPTargetConnection> 元素下方新增 io.timeout.millis 屬性,並以毫秒為單位指定新的時間限制,例如:
    <HTTPTargetConnection>
      <URL>https://my-very-slow-target.example.com</URL>
      <Properties>
        <Property name="io.timeout.millis">120000</Property>
      </Properties>
    </HTTPTargetConnection>

    在上述範例中,逾時時間已增加至 120 秒。請注意,300 秒是上限。詳情請參閱「Endpoints 屬性參考資料」。

  5. 儲存新修訂版本並部署 Proxy。

如果問題仍未解決,請參閱下方的「必須收集診斷資訊」。

原因:TargetServer 連線問題

診斷

設定 <LoadBalancer> 端點屬性時,Apigee 不會揭露連線問題的確切原因。您或許可以從目標要求經過的時間推斷連線問題的原因,做為偵錯方法,您可以嘗試完全移除 <LoadBalancer> 元素,並嘗試直接在 Proxy 中點選目標。

如要診斷問題,請使用偵錯工具

  1. 為 API Proxy 建立偵錯工作階段
  2. 在偵錯工作階段中傳送要求,並檢查偵錯輸出內容。

在上述範例中,逾時時間為 9 秒。由於不是 55 秒,您知道錯誤原因並非目標速度緩慢而導致逾時。根據預設,如果在 TargetEndpoint 上使用 <LoadBalancer> 元素,Apigee 會再重試連線兩次。由於您知道系統總共嘗試連線三次,且連線錯誤的預設逾時時間為三秒 (connect.timeout.millis), 因此可以假設問題是連線問題。

解析度

如果確認問題是連線逾時,請參閱 VPC Peering 503 Service Unavailable error with TARGET_CONNECT_TIMEOUT

如遇其他問題,請移除 <LoadBalancer> 元素進行偵錯,找出確切的錯誤代碼,並在錯誤目錄中檢查該代碼。

必須收集診斷資訊

如果按照上述指示操作後問題仍未解決,請收集下列診斷資訊,然後與 Google Cloud 支援團隊聯絡:

  1. 專案 ID 和 Apigee 機構名稱
  2. Proxy 名稱和環境。
  3. 問題發生的時間範圍。
  4. 問題發生的頻率
  5. 目標主機名稱。
  6. 偵錯工作階段發生問題。