在我设置的 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 表单处理程序还是其他什么?