Моя установка - django 1.3 и пакеты mod_wsgi и apache по умолчанию для ubuntu 10.04. Я протестировал одно представление своего приложения на моей виртуальной машине разработки (DEBUG и панель инструментов отладки отключены):
ab -n 200 -c 5 http://127.0.0.1/
и получил 4 запроса в секунду. Это казалось медленным, поэтому я упростил запросы, использовал индексы и т.д. до такой степени, что панель инструментов отладки сообщила мне, что у меня есть 4 запроса, занимающие 8 мс. Выполняя тот же тест, я получаю только 8 запросов в секунду. Кажется, что процессор все время работает на 100%. Это кажется довольно медленным для того, что сейчас является довольно простым представлением, но это всего лишь маломощная виртуальная машина.
Я решил запустить большой экземпляр ec2 (4 процессора), чтобы посмотреть, какую производительность я получу на машине этого класса, и был удивлен, получив всего 13 запросов в секунду. Как я могу изменить конфигурацию apache / mod_wsgi, чтобы получить больше производительности от машин этого класса?
Я думаю, что использую worker, а не prefork:
$ /usr/sbin/apache2 -l
Compiled in modules:
core.c
mod_log_config.c
mod_logio.c
worker.c
http_core.c
mod_so.c
Моя рабочая конфигурация:
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
и мои настройки WSGI выглядят так:
WSGIScriptAlias / /home/blah/site/proj/wsgi.py
WSGIDaemonProcess blah user=blah group=blah processes=1 threads=10
WSGIProcessGroup blah
Большое спасибо за вашу помощь!
Увеличьте количество процессоров WSGIDaemonProcess как минимум в два раза и повторите попытку.