如何排查使用 Web 浏览器下载存储在 Amazon S3 中的对象时加载时间长的问题?

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

我尝试使用 Web 浏览器从 Amazon Simple Storage Service (Amazon S3) 下载对象,但是下载速度很慢。为什么会发生这种情况?

解决方法

检查以下各项,以确定导致使用 Web 浏览器从 Amazon S3 下载对象的时间变长的原因:

互联网带宽低

验证您从互联网服务提供商 (ISP) 获得的网络速度。如果网速较慢,则当您尝试连接到 Amazon S3 存储桶并下载对象时,可能会造成瓶颈。

对象过大

如果某些对象下载时间较长,而其他对象可以正常速度下载,请检查下载时间较长的对象的大小。对于非常大的 Amazon S3 对象,当您的 Web 浏览器尝试下载整个对象时,您可能会遇到下载时间较长的情况。不妨尝试使用 Amazon S3 API 下载具有带范围的 GET 请求的大型对象。由于带范围的 GET 请求允许您以独立、较小的区块下载大型对象,因此可以帮助您避免延迟。

客户端与 Amazon S3 存储桶之间的地理距离

如果您的客户端位于世界不同地区,并从您的 Amazon S3 存储桶下载对象,则与存储桶的 AWS 区域在地理位置上相距较远的客户端可能会遇到下载时间较长的情况。为了缩短地理位置较远的客户端的下载时间,您可以:

  • 通过 Amazon CloudFront 分配为 Amazon S3 对象提供服务。CloudFront 可以从地理位置上更靠近您的客户端的边缘站点为客户端提供服务,从而最大限度地减少延迟。
  • 考虑将您的存储桶移动到在地理位置上更靠近您的客户端的 AWS 区域。您可以使用跨区域复制功能,将对象从源存储桶复制到另一个区域的目标存储桶。

中间网络相关问题

与网络相关的问题(如数据包丢失、跃点过多或任何其他 ISP 相关的问题),都可能会影响使用 Web 浏览器从 Amazon S3 进行下载的时间。

要确定与网络相关的问题是否是导致下载速度慢的原因,可以使用 mtrtraceroute 等工具进行测试。这些工具可以帮助发现向远程主机发送数据包时可能存在的网络问题。例如,以下 traceroute 命令会通过 80 端口向 us-east-1 中的 Amazon S3 终端节点发送一个 TCP traceroute:

sudo traceroute -P TCP -p 80 s3.us-east-1.amazonaws.com

注意:最佳做法是运行 TCP traceroute,因为许多网络设备不会通过 ICMP 做出响应。

工作站资源

确认您的工作站内没有可能造成整体延迟的资源争用(例如 CPU、内存或网络带宽)。

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

单独考虑 Amazon S3 的处理时间

为了帮助确定导致下载时间较长的原因,您可以单独考虑 Amazon S3 的处理时间。您可以启用服务器访问日志记录,然后查看日志中的 Total Time,该时间显示 Amazon S3 处理请求所用的时间。

此外,您可以分析 Amazon CloudWatch 指标 FirstByteLatency。FirstByteLatency 将显示 Amazon S3 从客户端处理请求所需的时间,然后开始将响应发送至客户端。CloudWatch 指标可提供存储桶级性能透视。

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


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?