Sil*_*ght 75
试试 Django调试工具栏.它将显示在每个页面上执行的查询以及它们花费的时间.它是一个非常有用,功能强大且易于使用的工具.
另外,从文档中阅读有关Django在数据库访问优化中的性能的建议.
和Jacob Kaplan-Moss的Django表演技巧.
Tom*_*ski 27
只需在谷歌上输入"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/
就个人而言,我正在使用中间件方法 - 即每个用户都可以切换存储在会话中的"profiling"标志,如果我的分析中间件注意到已经设置了一个标志,它会使用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
Run Code Online (Sandbox Code Playgroud)
编辑:对于分析SQL查询,Konstantin提到的http://github.com/robhudson/django-debug-toolbar是一件好事 - 但如果你的查询真的很慢(可能是因为它们有数百或数千),那么你将等待疯狂的时间直到它被加载到浏览器中 - 然后由于速度慢而难以浏览.此外,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
Run Code Online (Sandbox Code Playgroud)
小智 15
对于分析数据访问(这是大多数时间的瓶颈),请查看django-live-profiler.与Django Debug Toolbar不同,它同时收集所有请求中的数据,您可以在生产中运行它,而不会产生太多的性能开销或暴露您的应用程序内部.
Mic*_*ael 13
这里有无耻的插件,但我最近为此目的制作了https://github.com/django-silk/silk.它有点类似于django工具栏,但具有历史记录,代码分析和对所有内容的更精细控制.
Ton*_* Yu 11
我最近需要分析一个 Django 应用程序,并尝试了其中的许多建议。我最终使用pyinstrument来代替,它可以使用中间件列表的单个更新添加到 Django 应用程序中,并提供基于堆栈的计时视图。
快速总结一下我使用其他一些工具的经验:
pyinstrument
cProfile
计时并自动显示 ajax 计时,这两者都非常有用。与我尝试过的其他工具相比,它的pyinstrument
安装和使用要容易得多。
对于你所有的KCacheGrind粉丝,我发现很容易使用shell与Django的Client
即时生成配置文件的奇妙测试,特别是在生产中.我现在已经多次使用过这种技术,因为它有轻触 - 不需要讨厌的中间件或第三方Django应用程序!
例如,要分析似乎运行缓慢的特定视图,您可以破解打开shell并键入以下代码:
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()
Run Code Online (Sandbox Code Playgroud)
为了可视化生成的日志,我使用了hotshot2cachegrind:
但是还有其他选择:
归档时间: |
|
查看次数: |
39830 次 |
最近记录: |