Answers:
试试 Django Debug Toolbar。它将向您显示在每个页面上执行哪些查询以及它们花费多少时间。这是一个非常有用,功能强大且易于使用的工具。
另外,请从文档中阅读有关数据库访问优化中 Django性能的建议。
以及Jacob Kaplan-Moss 撰写的Django性能技巧。
只要在Google上输入“ django-profiling”,您就会获得以下链接(以及更多):
http://code.djangoproject.com/wiki/ProfilingDjango
http://code.google.com/p/django-profiling/
http://www.rkblog.rk.edu.pl/w/p/django-profiling-hotshot-and-kcachegrind/
我个人使用的是中间件方法-即每个用户都可以切换存储在会话中的“概要分析”标志,并且如果我的概要分析中间件注意到设置了标志,它将使用Python的hotshot模块,如下所示:
def process_view(self, request, view_func, view_args, view_kwargs):
# setup things here, along with: settings.DEBUG=True
# to get a SQL dump in connection.queries
profiler = hotshot.Profile(fname)
response = profiler.runcall(view_func, request, *view_args, **view_kwargs)
profiler.close()
# process results
return response
编辑:对于分析SQL查询http://github.com/robhudson/django-debug-toolbar康斯坦丁(Konstantin)提到是一件好事-但如果您的查询确实很慢(可能是因为有成百上千的查询),那么您在将其加载到浏览器中之前,将花费大量的时间-然后由于速度缓慢,将很难进行浏览。而且,django-debug-toolbar在设计上无法提供有关AJAX请求内部的有用信息。
EDIT2:django-extensions具有内置的强大分析命令:
https://github.com/django-extensions/django-extensions/blob/master/docs/runprofileserver.rst
做到这一点,瞧:
$ mkdir /tmp/my-profile-data
$ ./manage.py runprofileserver --kcachegrind --prof-path=/tmp/my-profile-data
python manage.py runprofileserver --prof-path=/path/to/dir
,请关注此博客:darkcoding.net/software/profiling-django-for-cpu-bound-apps。
hotshot
它已在Python 3中弃用并删除,因此此答案和ProfilingDjango
Wiki页面在20202
要进行数据访问分析(这通常是瓶颈所在),请查看django-live-profiler。与Django Debug Toolbar不同,它可以同时收集所有请求中的数据,并且您可以在生产环境中运行它而不会增加性能开销或暴露应用程序内部。
无耻的插件在这里,但我最近为此目的制作了https://github.com/django-silk/silk。它与django工具栏有些相似,但是具有历史记录,代码分析和对所有内容的更精细控制。
对于所有您的KCacheGrind爱好者来说,我发现将外壳与Django出色的测试结合使用非常容易,可以Client
即时生成配置文件日志,特别是在生产环境中。我现在已经在多种场合使用了该技术,因为它具有轻松的触觉-不需要讨厌的中间件或第三方Django应用程序!
例如,要分析似乎运行缓慢的特定视图,可以打开外壳并键入以下代码:
from django.test import Client
import hotshot
c = Client()
profiler = hotshot.Profile("yourprofile.prof") # saves a logfile to your pwd
profiler.runcall(c.get, "/pattern/matching/your/view/")
profiler.close()
为了可视化结果日志,我使用了hotshot2cachegrind:
但是还有其他选择:
当视图不是HTML(例如JSON)时,请使用简单的中间件方法进行性能分析。
这是几个例子:
https://gist.github.com/1229685-捕获所有进入视图的SQL调用
https://gist.github.com/1229681-剖析用于创建视图的所有方法调用
我最近需要分析Django应用,并尝试了许多建议。我最终改为使用pyinstrument,可以使用对中间件列表的单个更新将其添加到Django应用中,并提供基于堆栈的计时视图。
使用其他一些工具的经验总结:
pyinstrument
cProfile
计时并自动显示ajax计时的简便方法,这两者都非常有用。与我尝试过的其他工具相比,它的pyinstrument
安装和使用都非常容易。