我的设置是 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
非常感谢您的帮助!
答案1
将 WSGIDaemonProcess 进程数增加到至少 CPU 数量的两倍,然后重试