我的django应用程序在生产环境中变得非常慢。这可能是由于一些复杂或未索引的查询造成的。
有没有什么django式的方法来分析我的应用程序?
发布于 2010-03-02 17:25:14
只要在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
编辑: Konstantin提到的http://github.com/robhudson/django-debug-toolbar对于分析SQL查询来说是一件很好的事情--但是如果你的查询真的很慢(可能是因为有成百上千的查询),那么你将疯狂地等待大量的时间,直到它被加载到浏览器中-然后由于缓慢而很难浏览。此外,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
发布于 2012-12-16 19:22:10
要分析数据访问(这通常是瓶颈所在),请查看django-live-profiler。与Django Debug Toolbar不同,它同时收集所有请求的数据,您可以在生产中运行它,而不会产生太多的性能开销,也不会暴露您的应用程序内部。
发布于 2014-06-07 19:43:09
无耻的插头在这里,但我最近为此目的制作了https://github.com/django-silk/silk。它有点类似于django工具栏,但具有历史记录、代码分析和对一切的更细粒度控制。
https://stackoverflow.com/questions/2361985
复制相似问题