如何排查在从 Amazon S3 下载或向其上传内容时出现的速度缓慢或不一致的问题?

上次更新时间:2020 年 3 月 6 日

如何排查在从 Amazon Simple Storage Service (Amazon S3) 下载或向其上传内容时出现的速度缓慢或不一致的问题? 当我从 Amazon S3 下载内容或者从指定网络或设备向其上传内容时,我的请求延迟可能会提高。如何诊断高延迟或不一致的速度?

解决方法

检查以下内容,以了解和规避在从 Amazon S3 下载或向其上传内容时导致速度缓慢或不一致的可能原因:

  • 客户端进行请求的位置
  • 客户端互联网服务提供商 (ISP)
  • 客户端网络
  • 客户端资源
  • 向 Amazon S3 的请求速率
  • 确定周转时间的 Amazon S3 服务器访问日志

客户端进行请求的位置

使用地理位置尽可能靠近您的客户端的 Amazon S3 存储桶。存储桶可从全球访问,但它们位于特定的 AWS 区域中。请求与存储桶之间的地理距离会影响接收响应所需的时间。

您可以测试客户端与 S3 存储桶之间的地理距离影响。例如,您可以在与存储桶相同的 AWS 区域中启动 Amazon Elastic Compute Cloud (Amazon EC2) 实例,然后在另一个区域中启动另一个实例。使用两个实例测试同一个文件的上传和下载,然后比较两个区域之间的吞吐量。

要减少客户端与 S3 存储桶之间的距离,请考虑将数据移动到更靠近客户端的另一个区域中的存储桶中。您可以配置跨区域复制,以便将源存储桶中的数据复制到新区域中的目标存储桶。此外,可以考虑将客户端迁移到更靠近 S3 存储桶的位置。

客户端互联网服务提供商 (ISP)

测试您的网络路径,以检查任何丢包、大量跃点或任何其他与 ISP 相关的问题是否影响您的连接通过互联网的方式。

mtrtraceroute 等工具可以帮助提供潜在丢包的线索,以及发送至远程主机的数据包的延迟。此外,这些工具还可以帮助确定是否存在导致延迟增加的网络跃点。

例如,下面的 Linux traceroute 命令使用 TCP 端口 80 测试与 us-west-2 (Oregon) 区域终端节点的连接性:

sudo traceroute -P TCP -p 80 s3.us-west-2.amazonaws.com

在 Windows 操作系统中,您可以使用称为 tracert 的类似工具。

注意:许多网络设备不对 ICMP 作出响应。对于类似至 Amazon S3 的请求的测试,请务必对存储桶的区域终端节点运行 TCP traceroute 或 mtr。

如果从客户端到 Amazon S3 的互联网路由不是最佳路线,请考虑使用 Amazon S3 Transfer Acceleration,此服务利用 Amazon CloudFront 的边缘站点。查看 Amazon S3 Transfer Acceleration 速度比较工具可了解 Transfer Acceleration 是否会提高您的使用案例的性能。

注意:如果您启用 Transfer Acceleration,可能会收取额外的数据传输费用。请务必查看 Amazon S3 数据传输定价

客户端网络

通过审查内部数据包检验、防病毒扫描或网络访问管理确认您的客户端网络是否运行正常。此外,审查您的客户端或应用程序处理 DNS 解析和缓存的方式。

要从 Amazon S3 的分布特性和可用性中获益,请避免长时间缓存 DNS 解析

客户端资源

您的应用程序可能会发生延迟,或者发出请求的主机处理发送的请求和接收的响应可能会发生延迟。作为最佳实践,请确认主机内没有可能会造成整体延迟的资源争用(例如 CPU、内存或网络带宽)。

您可以使用资源监控器之类的工具或 top 命令(具体取决于您的操作系统)在数据传输期间检查大多数客户端系统上的资源使用情况。

该客户端的存储设备或系统也可能是造成延迟的原因。对客户端存储设备进行读取或写入操作会发生延迟增加,这可能会影响从 Amazon S3 下载或向其上传内容的性能。您必须从客户端侧对存储设备的 IOPS 进行问题排查,但 Amazon S3 性能可以使用 Amazon CloudWatch 指标 FirstByteLatency 进行分析。

注意:Amazon S3 CloudWatch 请求指标按照与自定义指标相同的费率计费。

FirstByteLatency 会显示 Amazon S3 处理来自客户端的请求所需的时间,然后开始将响应发送至客户端。CloudWatch 指标可提供存储桶级性能透视。您可以使用 Amazon S3 服务器访问日志缩小您的调查范围。有关更多信息,请参阅确定周转时间的 Amazon S3 服务器访问日志部分。

向 Amazon S3 的请求速率

默认情况下,S3 存储桶每秒可以对每个前缀支持数千个请求。如果客户端从 Amazon S3 中收到 HTTP 5xx 错误响应,可能表示已超出每个前缀的支持请求速率。要排查 5xx 错误,请参阅如何排查 Amazon S3 中的 HTTP 5xx 错误?

确定周转时间的 Amazon S3 服务器访问日志

您可以启用 Amazon S3 服务器访问日志记录,以查看周转时间指标。周转时间是指收到最后一个请求字节和发出第一个响应字节之间的时间。该指标是到第一个字节的时间 (TTFB) 指标。您可以使用周转时间确定从 Amazon S3 角度看操作所需要的时间。然后,您可以评估 Amazon S3 之外可能导致下载或上传速度整体减慢的其他延迟。

如果您发现延迟比平常高,最佳做法是重试请求,而不是等待请求完成。有关此指南和其他性能建议的更多信息,请参阅 Amazon S3 的性能准则


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?