django - Django中的并发性能(apache2 prefork/mod_wsgi),我在做什么错?

标签 django performance concurrency apache2 mod-wsgi

首先,我对以Django为基础的网站的性能丝毫不满意,它的访问量并没有增加,到目前为止,每天的访问量超过1000。

我很好奇它如何应付繁忙的交通高峰,所以我使用了ab工具进行一些基准测试。

我注意到并发大于1时的性能提供了与1个并发连接相同的请求量。

请求数是否应该随并发性增加?

我在具有1 GB RAM,apache2(prefork),mod_wsgi,memcached和mysql的虚拟机上。
页面上的所有内容均已缓存,数据库未受到任何点击。而且,如果memcached会删除该条目,则只有2个轻量(索引)查询-应该立即重新缓存。

基准测试数据:(注意:我确实用2000和1万个请求进行了基准测试,结果相同)

对于起始页面,由django通过apache2/mod_wsgi提供:
-n100 -c4:http://dpaste.com/97999/(58.2请求/秒)
-n100 -c1:http://dpaste.com/97998/(57.7请求/秒)

对于robots.txt,直接从apache2:
-n100 -c4:http://dpaste.com/97992/(4917请求/秒)
-n100 -c1:http://dpaste.com/97991/(1412请求/秒)

这是我的Apache conf:http://dpaste.com/97995/

编辑:添加了更多信息

wsgi.conf:http://dpaste.com/98461/

mysite.conf:http://dpaste.com/98462/

我的wsgi处理程序:

import os, sys
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

最佳答案

在嵌入式模式下使用带有许多进程的prefork MPM和mod_wsgi时,您可能会破坏包装盒的性能。首先,建议您阅读:

http://blog.dscpl.com.au/2009/03/load-spikes-and-excessive-memory-usage.html

使用像您一样的嵌入式模式,您需要仔细调整MPM参数。将MaxRequestsPerChild设置为非零不是一个好的开始,因为您将定期强制执行A​​pache进程,结果将导致负载高峰,因为必须重新加载所有内容。

建议使用MPM并在mod_wsgi守护程序模式下运行Python Web应用程序。首先,这将减少运行的进程,减少内存开销,并为系统性能提供更多的可预测性。然后可以开始更仔细地研究为什么事情运行速度变慢。

要注意的一件事是您在“ab”输出的以下部分中所获得的内容:

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:     0    0   0.2      0       2
Waiting:        0    0   0.1      0       2
Total:          0    0   0.2      0       2

如果max列显示较大的值,那么您将受到应用程序加载成本的打击,这是因为您没有通过预加载消除它们,或者通过较短的进程重新启动间隔将它们从测试中消除了。

关于django - Django中的并发性能(apache2 prefork/mod_wsgi),我在做什么错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1475960/

相关文章:

javascript - 为什么我的网站出现 JQuery AJAX 错误,并且没有响应 header ?

performance - 什么是 L1 Cache Reference 或 Main Memory Reference

c++ - Rcpp/RcppArmadillo C++/R 平衡性能

Golang 同步协程

entity-framework - Entity Framework - 乐观并发问题

python - 为什么 pip 因包的 md5 哈希错误而失败?

python - 使用 django-crispy-forms 处理带有拆分字段的 django-filter 表单

检查链表循环的算法

java - 来自 Callable 的 CompletableFuture?

python - Django 2.1.3 LDAP 身份验证未对后端进行身份验证