11

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

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

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

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

4

1 回答 1

3

既然您提到您在 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=disabledDevice Manager > Network Adapters > Advanced tab.

如果这不能解决您的问题,您可能需要尝试其他两个选项。这是一篇Microsoft 知识库文章,其中包含有关修改所有这些内容的详细信息。

于 2013-02-12T15:31:24.727 回答