代码之家  ›  专栏  ›  技术社区  ›  sharjeel

分析Django

  •  89
  • sharjeel  · 技术社区  · 16 年前

    我的django应用程序在生产上变得非常缓慢。可能是由于一些复杂的或未编制索引的查询。

    有没有什么简略的方法来介绍我的申请?

    6 回复  |  直到 7 年前
        1
  •  71
  •   Mr. S rex roy    12 年前

    试试 Django Debug Toolbar . 它将向您显示在每一页上执行的查询以及它们所花费的时间。它是一个非常有用、强大且易于使用的工具。

    此外,还可以阅读有关django性能的建议 Database access optimization 来自文档。

    Django performance tips 通过 雅各布·卡普兰·莫斯。

        2
  •  28
  •   NuLo    10 年前

    只需在Google上输入“django profileing”,就可以获得这些链接(以及更多):

    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调试工具栏的设计无法提供对Ajax请求内部的有用洞察。

    编辑2: 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
    
        3
  •  15
  •   Gourneau    13 年前

    对于分析数据访问(这是大多数时间的瓶颈所在),请查看 django live profiler 。与Django Debug工具栏不同,它同时收集所有请求的数据,您可以在生产环境中运行它,而无需过多的性能开销或暴露您的应用程序内部。

    签出 django-live-profiler . 与Django Debug工具栏不同,它同时收集所有请求的数据,您可以在生产环境中运行它,而不需要过多的性能开销或暴露应用程序内部。

    Check out this screenshot

        4
  •  12
  •   avelis Michael    9 年前

    不知羞耻的插在这里,但我最近做了 https://github.com/django-silk/silk 为此目的。它有点类似于Django工具栏,但具有历史记录、代码分析和对所有内容的更细粒度控制。

        5
  •  5
  •   Joshua Pokotilow    12 年前

    对于所有的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:

    但也有其他选择:

        6
  •  2
  •   Evgeny Zislis    14 年前

    当视图不是HTML时,例如JSON,使用简单的中间件方法进行分析。

    以下是几个例子:

    https://gist.github.com/1229685 -捕获所有进入视图的SQL调用

    https://gist.github.com/1229681 -分析用于创建视图的所有方法调用