В моей настройке Apache 2.2 MPM worker и 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>
Ни Apache, ни mod_wsgi не буферизуют запрос. Если происходит какая-либо буферизация, то она находится в Django или в коде вашего конкретного пользовательского приложения.
В зависимости от того, как работают веб-приложения Python, они могут наивно считывать все содержимое запроса в память перед обработкой. Чтобы избежать этих проблем, они действительно должны передавать данные.
Вам необходимо указать, какую функцию Django или другой механизм вы используете для обработки загрузки. Это стандартный обработчик формы POST в Django или что-то еще?