跳至内容

如何对来自 Amazon S3 的 HTTP 500 或 503 错误进行故障排除?

2 分钟阅读
0

当我向 Amazon Simple Storage Service (Amazon S3) 发出请求时,Amazon S3 会返回 5xx 状态错误。

简短描述

当您向 Amazon S3 发出请求时,您可能会收到一条类似于以下示例的错误消息:

  • "AmazonS3Exception: Internal Error (Service: Amazon S3; Status Code: 500; Error Code: 500 Internal Error; Request ID: A4DBBEXAMPLE2C4D)"
  • "AmazonS3Exception: Slow Down (Service: Amazon S3; Status Code: 503; Error Code: 503 Slow Down; Request ID: A4DBBEXAMPLE2C4D)"

当 Amazon S3 当时无法管理请求时,就会出现"500 Internal Error"错误消息。在您的 S3 存储桶收到大量请求时,通常会出现"503 Slow Down"错误消息。您可以每秒为每个分区的 Amazon S3 前缀发送 3,500 个 PUT/COPY/POST/DELETE 或 5,500 个 GET/HEAD 请求。但是,如果您的请求超出可用于在 AWS 区域复制的带宽,Amazon S3 可能会发送"503 Slow Down"响应。

为解决或避免 5xx 状态错误,请执行以下操作:

  • 对于发出请求的应用程序,请使用重试机制。
  • 配置应用程序以逐渐提高请求速率。
  • 将对象分配给多个前缀。
  • 监控 5xx 错误响应的数量。

**注意:**创建前缀后,Amazon S3 不会自动为支持的请求速率分配额外资源。Amazon S3 会根据请求模式进行扩展。随着请求速率增加,Amazon S3 会针对新的请求速率动态优化。

解决方法

使用重试机制

由于 Amazon S3 的分布式特性,您可以重试返回 500 或 503 错误的请求。最佳做法是在向 Amazon S3 发出请求的应用程序中构建重试逻辑。AWS SDK 具有内置的重试机制。

**注意:**在某些情况下,对同一个键的快速并发请求可能会导致 503 响应。在这些情况下,最佳做法是重试失败的请求。

配置您的应用程序以逐渐提高请求速率

较高的请求率或对象的请求速率突然增加可能会导致"503 Slow Down"错误消息。配置应用程序以保持请求速率,并使用指数回退实施重试。指数回退会在连续错误响应的两次重试之间实施越来越长的等待时间。此配置使得 Amazon S3 有时间监控请求模式,并在后端横向缩减以应对请求速率。

首先,将您的应用程序配置为以较低的每秒事务请求速率开始。然后,成倍地增加应用程序的请求速率。Amazon S3 会自动扩展以处理更高请求速率。

将对象分配给多个前缀

请求速率适用于 Amazon S3 存储桶中的每个前缀。要设置存储桶以管理更高的请求速率,请将对象分配到多个前缀。例如,如果使用存储桶来存储图像和视频,请将文件分配到以下两个前缀:

  • mybucket/images
  • mybucket/videos

如果前缀的请求速率逐渐增加,则 Amazon S3 会纵向扩展以分别处理两个前缀的请求。因此,存储桶可以处理两倍的请求速率。

监控 5xx 状态错误响应的数量

要监控收到的 5xx 状态错误响应的数量,请使用以下选项之一:

对更多问题进行故障排除

当您使用“加急”选项检索存档对象时,可能会收到以下错误消息之一:

  • "GlacierExpeditedRetrievalNotAvailable"
  • "Glacier expedited retrievals are currently not available, please try again later"

如果容量不足,无法处理加急 RestoreObject 请求,就会出现这些问题。在需求持续高涨的时期,Amazon S3 可能会拒绝加急检索请求并返回 503 错误消息。使用预置容量单元来确保按需提供加急检索容量。您可以每 5 分钟对每个单元进行至少三次加急检索。每个单元提供高达 150 Mbps 的检索吞吐量。您也可以使用标准批量检索选项。

您可以重试检索。但是,您可能仍然会遇到问题。除非在极端需求的情况下,否则可以在没有预置容量的情况下进行加急检索。由于不断变化且对非预置容量提供加急检索的需求很高,因此没有加急检索 SLA。

如果继续收到大量 5xx 状态错误速率,请联系 AWS Support。对于以 5xx 状态错误代码失败的请求,包括多个 Amazon S3 请求 ID 对

相关信息

使用 S3 Storage Lens 存储统计管理工具指标提高性能

使用 Amazon CloudWatch 监控指标

AWS 官方已更新 6 个月前