Apache、带有 mod_wsgi 的 Django 和大型请求缓冲

Apache、带有 mod_wsgi 的 Django 和大型请求缓冲

在我设置的 Apache 2.2 MPM 工作器和 Django 1.3 以及 mod_wsgi 2.8 中,我需要支持大型 POST 请求负载。问题是,当有许多这样的同时请求时,Apache 会用尽系统中的所有内存,然后崩溃。似乎 Apache 在执行 WSGI 处理程序并将请求传递给它之前,将请求完全缓冲在内存中。有没有办法控制 Apache 中的请求缓冲?每当发生崩溃时,日志都会显示以下错误:

[Wed Jun 29 18:35:27 2011] [error] cgid daemon process died, restarting

这是我的虚拟主机的配置:

<VirtualHost *:8080>
    ServerName example.com
    ErrorLog /var/log/apache2/error.log

    WSGIScriptAlias / <path to django.wsgi>
    WSGIPassAuthorization on

    WSGIDaemonProcess example.com
    WSGIProcessGroup example.com

    XSendFileAllowAbove on
    XSendFile on 
</VirtualHost>

答案1

Apache 或 mod_wsgi 都不会缓冲请求。如果发生任何缓冲,则发生在 Django 或您的特定用户应用程序代码中。

根据 Python Web 应用程序的运行方式,它们可能会先将整个请求内容读入内存,然后再进行处理。为了避免这些问题,它们应该真正地对数据进行流式传输。

您需要指出 Django 的哪个功能或其他机制用于处理上传。它是 Django 中的标准 POST 表单处理程序还是其他什么?

相关内容