當我向 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 儲存貯體提出的請求數量較多。例如,每個分割的 Amazon S3 前置詞每秒可以傳送 3,500 個 PUT/COPY/POST/DELETE 請求或 5,500 個 GET/HEAD 請求。不過,如果您的請求超過跨區域複製可用的頻寬量,Amazon S3 可能會傳回 503 降速回應。
若要解決或避免 5xx 狀態錯誤,請完成下列任務:
- 對於提出請求的應用程式,請使用重試機制。
- 設定您的應用程式以逐步提高請求率。
- 跨多個前置詞分配物件。
- 監控 5xx 錯誤回應的數量。
**注意:**建立前置詞時,Amazon S3 不會自動為支援的請求率指派其他資源。Amazon S3 根據請求模式進行擴展。隨著請求率提高,Amazon S3 會針對新的請求率動態最佳化。
解決方法
使用重試機制
由於 Amazon S3 的分散式特性,您可以重試傳回 500 或 503 錯誤的請求。最佳實務是在向 Amazon S3 提出請求的應用程式中建置重試邏輯。
所有 AWS SDK 都有內建重試機制,包含使用指數退避的演算法。此演算法在連續錯誤回應的重試之間實作越來越長的等待時間。許多指數退避演算法都使用抖動 (隨機延遲) 來防止連續衝突。如需詳細資訊,請參閱重試行為。
**注意:**Amazon S3 支援每個分割的 Amazon S3 前置詞每秒最多 3,500 個 Put 請求的請求率。在某些情況下,對相同金鑰快速並行 Put 請求可能會導致 503 回應。在這些情況下,最佳實務是重試失敗的請求。
設定您的應用程式以逐步提高請求率
如果您以接近速率限制的高請求率提出請求,Amazon S3 可能會傳回 503 減速錯誤。如果前置詞中物件的請求率突然增加,您會收到 503 減速錯誤。設定您的應用程式以維持請求率,並以指數退避重試。此組態可讓 Amazon S3 有時間監控請求模式,並在後端縮減,以處理請求率。
將應用程式設定為以較低的請求率 (每秒交易數) 啟動,以避免 503 降速錯誤。然後,以指數方式提高應用程式的請求率。Amazon S3 會自動擴展以處理更高的請求率。
跨多個前置詞分配物件
請求率適用於 Amazon S3 儲存貯體中的每個前置詞。若要設定儲存貯體以處理整體較高的請求率,並避免 503 降速錯誤,請跨多個前置詞分配物件。例如,如果您使用 Amazon S3 儲存貯體來儲存影像和影片,請將檔案分配到兩個前置詞:
- mybucket/images
- mybucket/videos
如果前置詞的請求率逐漸增加,Amazon S3 會擴展以分別處理兩個前置詞中每個前置詞的請求。Amazon S3 可擴展為每個分割的 Amazon S3 前置詞每秒最多處理 3,500 個 PUT/POST/DELETE 或 5,500 個 GET 請求。因此,儲存貯體處理的整體請求率會加倍。
監控 5xx 狀態錯誤回應數量
若要監控您收到的 5xx 狀態錯誤回應數量,請使用下列其中一個選項:
5xx 錯誤的其他原因
使用快速還原層擷取已封存的物件時,您可能會收到類似下列範例的錯誤:
- "GlacierExpeditedRetrievalNotAvailable"
- 「Glacier 快速擷取目前無法使用,請稍後再試一次」
如果處理快速請求的容量不足,就會發生這些錯誤。在持續高需求的期間,Amazon S3 可能會拒絕快速擷取請求,並傳回 503 錯誤。使用佈建容量單位 (PCU),來確保快速擷取的擷取容量可隨需使用。每個單位允許每 5 分鐘至少執行三次快速擷取。每個單位提供高達每秒 150 百萬位元組 (MBps) 的擷取輸送量。您也可以使用「標準」或「大量」擷取選項。
您可以重試擷取,但重試並不保證成功。除極端需求的情況外,無需佈建容量即可進行快速擷取。由於不斷變更以及對非佈建容量的快速擷取可用性的高需求,因此 AWS Support 不提供有保證的 SLA。
如果您繼續收到大量 5xx 狀態錯誤率,請聯絡 AWS Support。對於顯示 5xx 狀態錯誤代碼的失敗請求,請納入多個 Amazon S3 請求 ID 對。
相關資訊
疑難排解
使用 Amazon CloudWatch 監控指標