基准测试django应用程序

Jia*_*aro 14 python django profiling

我有兴趣测试我的django应用程序的性能,获得逐行性能数据的最佳方法是什么?

注意:谷歌搜索返回许多人对django本身进行基准测试.我不是在寻找django的基准测试,我正在尝试测试我正在编写的django应用程序的性能:)

谢谢!

编辑:通过"逐行"我只是意味着计时单个函数,数据库调用等,以找出瓶颈在非常精细的水平上

S.L*_*ott 7

这有两层.对于我们的测试,我们拥有大部分#1.我们即将开始#2.

  1. Django孤立无援.普通的Django单元测试在这里运行良好.创建一些循环通过一些(少于6个)"典型"用例的测试.得到这个,发布,等等.收集时间数据.这不是真正的Web性能,但它是一个易于使用的测试场景,可用于调优.

  2. 你的整个网络堆栈.在这种情况下,您需要一个运行Squid,Apache,Django,MySQL等的常规服务器.您需要第二台计算机作为客户端通过urllib2运行您的网站,做一些(少于6个)"典型"用例.得到这个,发布,等等.收集时间数据.这仍然不是"真正的"网络性能,因为它不是通过互联网,而是在没有真正精心设置的情况下尽可能接近.

请注意,#2(端到端)包括大量的性能缓存.如果您的客户端脚本正在执行类似的工作,缓存将非常有用.如果您的客户端脚本每次都执行独特的操作,则缓存将不太有用.

最难的部分是确定"典型"工作量是什么.这不是功能测试,因此工作负载不必包含所有内容.此外,客户端运行的并发会话越多,它就越慢.当测试客户端是处理过程中最慢的部分时,不要努力优化服务器.


编辑

如果"逐行"意味着"分析",那么,你必须运行一个Python分析器.

https://docs.python.org/library/profile.html

请注意,Django ORM层中有大量缓存.因此,运行视图功能六次以获得一组有意义的测量值是不明智的.您必须运行"典型"操作集,然后在配置文件中找到热点.

通常,您的应用程序很容易优化 - 您不应该做太多.您的视图功能应该简短,无需处理.类似地,您的表单和模型方法功能应该非常短.


Van*_*ale 5

获取Django应用程序的逐行性能数据(分析)的一种方法是使用像repoze.profile这样的WSGI中间件组件.

假设您在Apache中使用mod_wsgi,可以将repoze.profile插入到您的应用中,如下所示:

...
application = django.core.handlers.wsgi.WSGIHandler()
...
from repoze.profile.profiler import AccumulatingProfileMiddleware
application = AccumulatingProfileMiddleware(
    application,
    log_filename='/path/to/logs/profile.log',
    discard_first_request=True,
    flush_at_shutdown=True,
    path='/_profile'
)
Run Code Online (Sandbox Code Playgroud)

现在,您可以将浏览器指向/ _profile以查看您的个人资料数据.当然这不适用于mod_python或内部Django服务器.