Назад | Перейти на главную страницу

Apache, Django с mod_wsgi и буферизация больших запросов

В моей настройке 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 или что-то еще?