我正在使用pycurl作为boto
Python库的后端。它非常快速且功能多样,但我遇到的问题是上传大文件经常在连接重置时失败。当我使用普通boto
与普通httplib
时,它更可靠。
我使用Wireshark发现的是,经过一段时间(或有时很快),我的机器停止从S3接收ACK,因此它会重置连接。似乎pycurl
几乎是如此之快以至于扼杀了连接。如果我限制上传(我使用多接口)或使用较慢的互联网连接,上传运行正常。
我仍然想知道我可能做错了什么。
我还尝试使用.NET S3 SDK上传。它慢了3倍,但成功了。此外,它全部在Windows 7上,同一网络上的OS X机器再次上传速度慢得多,但可靠。
答案 0 :(得分: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=disabled
并在Device Manager > Network Adapters > Advanced tab
下禁用TCP卸载来禁用Chimney Offload。
如果这不能解决您的问题,您可能需要尝试其他两个选项。这是一个Microsoft KB article,其中包含有关修改所有这些内容的详细信息。