如何疑難排解 Amazon S3 的 HTTP 500 或 503 錯誤?

2 分的閱讀內容
0

當我向 Amazon Simple Storage Service (Amazon S3) 提出請求時,Amazon S3 傳回 5xx 狀態錯誤。如何疑難排解這些錯誤?

簡短說明

Amazon S3 可以傳回以下 5xx 狀態錯誤之一:

  • AmazonS3Exception: 內部錯誤 (服務: Amazon S3;狀態碼: 500;錯誤代碼: 500 內部錯誤;請求 ID: A4DBBEXAMPLE2C4D)
  • AmazonS3Exception: 減速 (服務: Amazon S3;狀態碼: 503;錯誤代碼: 503 降速;請求 ID: A4DBBEXAMPLE2C4D)

錯誤代碼 500 內部錯誤表示當時 Amazon S3 無法處理請求。錯誤代碼 ** 503 降速**一般表示向 S3 儲存貯體提出的請求數量非常多。例如,您可以在 S3 儲存貯體中每秒每個前置詞傳送 3,500 個 PUT/COPY/POST/DELETE 請求或 5,500 個 GET/HEAD 請求。不過,在某些情況下,如果您的請求超過跨區域複製可用的頻寬量,Amazon S3 可能會傳回 503 降速回應。

由於 Amazon S3 是分散式服務,因此在正常使用服務期間,預期 5xx 錯誤百分比會非常小。從 Amazon S3 傳回 5xx 錯誤的所有請求都可以重試。這是讓 Amazon S3 提出請求的任何應用程式具有容錯機制或實作重試邏輯的最佳實務。這樣做可以讓 S3 從這些錯誤中復原。

若要解決或避免 5xx 狀態錯誤,請考慮以下方法:

  • 在提出請求的應用程式中使用重試機制。
  • 設定您的應用程式以逐漸提高請求速率。
  • 跨多個前置詞分配物件。
  • 監控 5xx 錯誤回應的數量。

注意: Amazon S3 不會為每個新前置詞指派其他資源。它會根據呼叫模式自動擴展。隨著請求速率提高,Amazon S3 會針對新的請求速率動態優化。

解決方案

在提出請求的應用程式中使用重試機制

由於 Amazon S3 的分散式特性,可以重試傳回 500 或 503 錯誤的請求。最佳實務是在向 Amazon S3 提出請求的應用程式中建置重試邏輯。

所有 AWS SDK 都有內建重試機制,包含使用指數退避的演算法。此演算法在連續錯誤回應的重試之間實作越來越長的等待時間。大多數指數退避演算法都使用抖動 (隨機延遲) 來防止連續衝突。如需詳細資訊,請參閱 AWS 中的錯誤重試和指數退避

設定您的應用程式以逐步提高請求速率

若要避免 ** 503 降速**錯誤,請將應用程式設定為以較低的請求速率 (每秒交易數) 啟動。然後,以指數方式提高應用程式的請求速率。Amazon S3 會自動擴展以處理更高的請求速率。

跨多個前置詞分配物件

在 S3 儲存貯體中的每個前置詞會套用在效能指導方針和設計模式中描述的請求速率。若要設定儲存貯體以處理整體較高的請求速率,並避免 503 降速錯誤,您可以跨多個前置詞分配物件。例如,如果您使用 S3 儲存貯體儲存影像和影片,則可以將檔案分配到與以下相似的兩個前置詞:

  • mybucket/images
  • mybucket/videos

如果前置詞的請求速率逐漸增加,Amazon S3 會縱向擴展以處理兩個前置詞中每個前置詞的請求。S3 將縱向擴展為每秒處理 3,500 個 PUT/POST/DELETE 或 5,500 個 GET 請求。因此,儲存貯體處理的整體請求速率會加倍。

監控 5xx 狀態錯誤回應數量

若要監控您取得的 5xx 狀態錯誤回應數量,您可以使用下列其中一個選項:

其他疑難排解

如果您繼續看到高 5xx 狀態錯誤率,請聯絡 AWS Support。對於顯示 5xx 狀態錯誤代碼的失敗請求,請納入其 Amazon S3 請求 ID 對。


相關資訊

疑難排解 Amazon S3

AWS 官方
AWS 官方已更新 2 年前