如何纠正 Amazon S3 中的 HTTP 500 或 503 错误?

上次更新时间:2021 年 12 月 17 日

在向 Amazon Simple Storage Service (Amazon S3) 发出复制或上载对象请求时,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)

如何对这些错误进行故障排除?

简短描述

错误代码 500 内部错误指示 Amazon S3 此时无法处理请求。错误代码 503 Slow Down 通常表示对 S3 存储桶的请求数量非常高,超过了请求速率。(例如,您每秒可以在 S3 存储桶中为每个前缀发送 3500 个 PUT/COPY/POST/DELETE 或 5500 个 GET/HEAD 请求。) 但在某些情况下,如果您的请求超出了可用于跨区域复制的带宽量,那么 Amazon S3 也会返回 503 Slow Down 响应。

由于 Amazon S3 是一种分布式服务,因此,在正常使用该服务时,预计会出现极小比例的 5xx 错误。所有从 Amazon S3 返回 5xx 错误的请求都可以重试。因此,对于向 Amazon S3 发出请求的任何应用程序,最佳实践是采用容错机制或实施重试逻辑。这样,S3 就可以从这些错误中恢复。

要解决或避免 5xx 错误,请考虑以下方法:

  • 在发出请求的应用程序中启用重试机制。
  • 配置应用程序以逐步提高请求速率。
  • 跨多个前缀分发对象。
  • 监视 500 内部错误响应的数量。
  • 使用其他方法复制数据。

解决方法

在发出请求的应用程序中启用重试机制

由于 Amazon S3 的分布式特性,可以对返回 500 或 503 错误的请求进行重试。最佳实践是将重试逻辑构建到向 Amazon S3 发出请求的应用程序中。要更新应用程序的重试逻辑,请将应用程序的重试次数设置为“10”。

所有 AWS 开发工具包都有一个内置的重试机制,其算法使用指数回退。对于连续错误响应,这种算法实现的等待时间越来越长。大多数指数回退算法会利用抖动 (随机延迟) 来防止连续的冲突。有关更多信息,请参阅 AWS 中的错误重试和指数回退

配置应用程序以逐步提高请求速率

为了避免 503 速度变慢错误,请配置您的应用程序,使其以较低的请求速率(每秒事务数)开启。然后,以指数方式提高应用程序的请求速率。Amazon S3 会自动扩展以处理更高的请求速率。

跨多个前缀分发对象

请求速率和性能指南中描述的请求速率根据 S3 存储桶中的前缀应用。要设置存储桶以处理更高的请求速率并避免 503 速度变慢错误,您可以跨多个前缀分发对象。例如,如果您正在使用 S3 存储桶存储图像和视频,则可以将文件分发到与以下内容类似的两个前缀中:

  • mybucket/images
  • mybucket/videos

如果前缀上的请求速率逐渐增加,Amazon S3 将纵向扩展以处理两个前缀中每个前缀的请求。(S3 将纵向扩展到每秒处理 3,500 个 PUT/POST/DELETE 或 5,500 个 GET 请求。) 因此,存储桶处理的总体请求速率将翻倍。

监视 500 内部错误响应的数量

要监控您获取的 500 内部错误响应数量,您可以使用以下选项之一:

使用其他方法复制数据

有关在区域之间复制数据的其他方式,请考虑以下选项:


这篇文章对您有帮助吗?


您是否需要账单或技术支持?