我想對在 Application Load Balancer 存取日誌中或 Amazon CloudWatch 指標中,收到 ELB_504 錯誤進行疑難排解。或者,當我透過 Application Load Balancer 連線到我的服務時收到 HTTP 504 錯誤。
簡短說明
當閘道或 Proxy 逾時時,會發生 HTTP 504 錯誤。Application Load Balancer HTTP 504 錯誤可能出於以下原因:
- 負載平衡器無法在 10 秒連線逾時過期之前與目標建立連線。
- 負載平衡器在連線到目標時遇到 SSL 信號交換逾時。
注意: 您無法調整 10 秒 SSL 信號交換逾時。
- 負載平衡器與目標建立了連線,但目標在閒置逾時期限結束之前未回應。
- 目標傳回的 Content-Length 標頭值大於實體主體,且負載平衡器逾時。
- 高流量導致目標反應速度變慢。
- 目標是 AWS Lambda 函數,服務在連線逾時過期之前沒有回應。
解決方法
檢查您的負載平衡器是否允許使用已註冊目標的流量
使用 Sum 統計資料檢查 TargetConnectionErrorCount CloudWatch 指標。如果您看到正資料點而不是 0 ,則表示負載平衡器和目標之間存在連線問題。
若要解決這些問題,請檢查與負載平衡器和後端目標關聯的網路安全群組。確保網路安全群組允許負載平衡器和目標之間的流量和運作狀態檢查連接埠上的雙向流量。確認子網路的網路存取控制清單 (網路 ACL) 允許從目標到臨時連接埠 (1024-65535) 上的負載平衡器節點的流量。
注意: 最佳做法是為 Application Load Balancer 使用特定的安全群組規則。
檢查負載平衡器指標
若要確定您的目標標記為運作狀態不佳的原因,請檢查 Application Load Balancer 的 CloudWatch 指標。如果沒有 HTTPCode_ELB_504_Count 指標資料,則表示 504 錯誤是由應用程式伺服器傳回,而不是負載平衡器。檢查 TargetResponseTime 指標的最大值是否經常超過逾時值,因為此組態可能會導致 504 錯誤。
此外,請根據資源類型,檢查目標中的以下 CPU 和記憶體使用率指標:
- 對於 Amazon Elastic Compute Cloud (Amazon EC2),請檢查 CPUUtilization 指標。EC2 執行個體預設不會向 CloudWatch 傳送記憶體指標,但您可以傳送自訂記憶體指標。
- 對於 Amazon ECS 任務,請檢查 CPUUtilization 和 MemoryUtilization 指標。如果任一值為 1 (100%),則該任務將變成無回應。
- 對於 Lambda 函數,請檢查持續時間指標。如果持續時間超過負載平衡器的閒置逾時值,那麼您會收到閘道逾時錯誤。
提高資源可用性
如果您的目標 CPU 使用率很高,那麼它們可能會變成無回應。
若要解決此問題,請將以下資源增加到您的目標:
更新應用程式的程式碼,使其回應 HTTP 請求時更有效率。請確認應用程式的回應時間不超過設定的閒置逾時時間。依預設,Application Load Balancer 的閒置逾時為 60 秒。如果需要,請增加負載平衡器的閒置逾時時間。
注意: 只有當目標需要完成大量運算作業時,最佳做法才是增加閒置逾時值。否則,最佳做法是最佳化目標中的資源使用量。
根據您的需求擴展目標
若要根據您的需求擴展目標,請對組態執行下列動作:
注意: 當您調用 Lambda 函數時,該函數會自動擴展。
檢查您的外部相依性
當應用程式使用微服務架構時,資料庫或 API 等外部相依性會影響目標回應時間。
檢查以下常見的外部相依性是否有問題:
- 對於 Amazon Relational Database Service (Amazon RDS) 資料庫,請檢查 ReadLatency、WriteLatency 和 DatabaseConnections CloudWatch 指標。
- 對於 Amazon Simple Queue Service (Amazon SQS) 佇列,請檢查 ApproximateAgeOfOldestMessage 和 NumberOfMessagesDelayed CloudWatch 指標。
- 對於 Amazon Simple Storage Service (Amazon S3) 儲存貯體,請檢查 FirstByteLatency、TotalRequestLatency、4xxErrors 和 5xxErrors CloudWatch 指標。
- 對於 Amazon Cognito 驗證服務,請檢查 TokenRefreshSuccesses CloudWatch 指標,並檢查 ThrottlingException 錯誤。
若要確定效能瓶頸的來源,請執行下列動作:
使用 Compute Optimizer 避免將來出現問題
使用 AWS Compute Optimizer 深入了解您對 Amazon EC2、Amazon ECS 和 Lambda 資源的使用量。Compute Optimizer 會偵測您的資源使用量是否過高,以幫助您避免逾時。它還會提供有關如何最佳化工作負載的最佳做法。
相關資訊
HTTP 504: 閘道逾時
如何對 Elastic Load Balancing 中的 Application Load Balancer 的高延遲問題進行疑難排解?
如何對 Application Load Balancer 中的驗證問題進行疑難排解?
如何對使用 Classic Load Balancer 時傳回的 504 錯誤進行疑難排解?