【问题标题】:S3 Upload with pycurl interrupts带有pycurl中断的S3上传
【发布时间】:2013-01-19 21:15:14
【问题描述】:

我使用 pycurl 作为boto Python 库的后端。它非常快速且用途广泛,但我遇到的问题是大文件的上传经常在连接重置时失败。当我使用普通的boto 和普通的httplib 时,它更可靠。

我在使用 Wireshark 时发现,一段时间后(或者有时也很快),我的机器停止接收来自 S3 的 ACK,因此它重置了连接。似乎pycurl 太快了,以至于它阻塞了连接。如果我限制上传(我使用多界面)或使用较慢的互联网连接,上传运行良好。

我仍然想知道我可能做错了什么。

我还尝试使用 .NET S3 SDK 进行上传。它慢了大约 3 倍,但成功了。此外,这一切都在 Windows 7 上,同一网络上的 OS X 机器再次上传速度慢很多,但可靠。

【问题讨论】:

  • 听起来 Windows 中的 NIC 驱动程序令人窒息。我在其他应用程序中也看到了这种行为。轶事证据表明,关闭驱动程序中的各种 TCP 卸载选项可能会有所帮助。

标签: python curl tcp upload amazon-s3


【解决方案1】:

既然您提到您在 Windows 7 上遇到问题,您能否以管理员身份运行命令提示符并发布netsh int tcp show global 的结果?您应该会看到类似以下内容:

TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State          : enabled
Chimney Offload State               : automatic
NetDMA State                        : enabled
Direct Cache Acess (DCA)            : disabled
Receive Window Auto-Tuning Level    : normal
Add-On Congestion Control Provider  : none
ECN Capability                      : disabled
RFC 1323 Timestamps                 : disabled

我建议您将结果复制/粘贴到 .txt 文件中,以记录您当前的设置。您感兴趣的设置是烟囱卸载、接收端缩放 (RSS) 和 NetDMA。这些都是尝试从 NIC 或 CPU 卸载处理的功能,它们有时会导致出现与您描述的症状类似的问题。

在搞乱 RSS 或 NetDMA 之前,我会尝试通过运行 netsh int tcp set global chimney=disabled 并在 Device Manager > Network Adapters > Advanced tab 下禁用 TCP 卸载来禁用 Chimney Offload。

如果这不能解决您的问题,您可能需要尝试其他两个选项。这是Microsoft KB article,其中包含有关修改所有这些的详细信息。

【讨论】:

  • 谢谢,这看起来很有趣,但不幸的是,我现在无法验证它,因为我的工作场所发生了一些变化,上传总是运行缓慢但稳定。但我仍然想知道如何在我的 SW 中缓解这个问题......
猜你喜欢
  • 2013-06-04
  • 1970-01-01
  • 2012-06-09
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-05
  • 1970-01-01
相关资源
最近更新 更多