【问题标题】:Connection resets on (large) file upload(大)文件上传时连接重置
【发布时间】:2011-08-31 14:13:28
【问题描述】:

所以我在 Pylons 中上传文件时遇到了一个相当棘手的问题,我希望有人能够帮助我。最初我发布了here 的问题,认为这是 Pylons 的问题,但后来我得出结论认为问题是由服务器引起的,即粘贴问题,我已经找到了问题发生的确切位置,但是我不确定如何解决它。行为如下。我有一个 Pylons Web 应用程序,我通过 Paster 提供服务。该应用程序的一部分允许用户将文件上传到系统,有时这些文件可能相当大(> 50mb)。在此类上传期间,服务器偶尔会重置连接(即,在 Chrome 中,错误显示为“错误 101 (net::ERR_CONNECTION_RESET):连接已重置。”。)这不会总是发生,只有大约 50% 的时间使用较大的文件。

在这些情况下,服务器永远不会将 POST 提交给应用程序级别。没有抛出异常(至少,我能找到)。我已将问题缩小到 cascade.py(特别是从 httpserver.py 调用的 wsgi_application 方法)。来自后者:

结果 = self.server.wsgi_application(self.wsgi_environ, self.wsgi_start_response)

在 cascade.py 的 call 函数中,该文件似乎被写入了一个临时文件。相关循环开始于:

当 copy_len > 0:

然后它将块一个接一个地写入打开的文件。这些写入都不会单独引发异常。但是,服务器通常会在这些写入期间简单地“消失”,看似随机(时间似乎也与此无关)。因此,如果我打印出正在减少的 copy_len 大小,我会看到它减少到一个点,然后服务器突然发送一个“连接重置”(或者至少客户端认为是这样)和方法似乎已退出(copy_len 停止打印,好像循环已退出,尽管它不在 0 处)。

我完全被难住了,因为 1) 这只是偶尔发生,并且 2) 我似乎无法找到实际的错误/异常——它只是有点……死了。

如果重要的话,我正在运行 paste 1.7.3、Python 2.7 和 Fedora OS。有没有人对可能发生的事情有任何见解,以及我如何能够解决这个问题?非常感谢您的帮助。

【问题讨论】:

    标签: python pylons paste paster


    【解决方案1】:

    想到了两个想法......

    • 使用另一个更强大的网络服务器进行测试,例如nginx。如果需要,它可以同时运行。看看问题是否仍然存在。虽然 paste 可以处理网络应用程序,但据我所知,它并不意味着处理大量文件传输。
    • 您在上传期间是否使用Chunked Transfer Encoding

    【讨论】:

    • +1 这可能是 Web 服务器问题,而不是 python/pylons 问题。
    【解决方案2】:

    我在 Ubuntu 10.04 上使用 apache 2.2 + mod_python 3.3 没有问题。我已成功上传大文件 (400mb)。

    我已经使用uploader 构建了 html 上传表单。

    【讨论】:

      猜你喜欢
      • 2011-12-29
      • 1970-01-01
      • 2020-03-20
      • 2013-10-02
      • 2011-04-25
      • 1970-01-01
      • 2021-12-11
      • 2019-02-04
      • 2011-11-26
      相关资源
      最近更新 更多