我的设置是Django 1.3以及Ubuntu 10.04的默认mod_wsgi和Apache软件包。我在开发虚拟机上测试了我的应用程序中的一个视图(DEBUG和调试工具栏已关闭):
ab -n 200 -c 5 http://127.0.0.1/
我进行了测试,每秒只能得到4个请求。这看起来很慢,所以我简化了查询,并使用索引等方法,使调试工具栏告诉我有4个查询需要8毫秒。再次运行相同的测试,我只能得到8个请求每秒。CPU似乎一直处于100%。对于现在一个非常简单的视图来说,这似乎相当缓慢,但这只是一个低功率的VM。
我决定启动一个大型的ec2实例(4个cpu)来测试该类机器的性能表现,并惊讶地发现每秒只有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
非常感谢你的帮助!
注意:我尝试了另一个实例中的 AB 测试,得到了相同的结果。