2013-02-05 38 views
11

我使用pycurl作为boto Python库的后端。这是非常快速和多功能的,但我有一个问题,上传的大文件通常无法连接重置。当我使用普通的boto和普通的httplib时,它更可靠。S3上传与pycurl中断

我发现使用Wireshark的是,经过一段时间(或有时相当快),我的机器停止接收来自S3的ACK,因此它重置连接。几乎看起来,pycurl是如此之快,它扼杀了连接。如果我扼杀上传(我使用多接口)或使用较慢的互联网连接,上传运行良好。

我还在想我可能做错了什么。

我也试着用.NET S3 SDK上传。它慢了大约3倍,但成功了。此外,它全部在Windows 7上,同一网络上的OS X机器再次上传速度较慢,但​​可靠。

+1

声音就像Windows中的NIC驱动程序一样窒息。我也在其他应用程序中看到过这种行为。传闻证据表明,关闭驱动程序中的各种TCP卸载选项可能会有所帮助。 – nikola

回答

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卸载。

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

+0

谢谢,这看起来很有趣,但不幸的是,我现在无法验证它,因为在我的工作场所发生了一些变化,上传总是运行得很慢但稳定。但我仍然想知道如何在我的SW中缓解这个问题... –