Django, Python 的性能分析工具

最近接手的 Apache HUE 项目性能出现了问题,线上经常出现响应时间过长或因为时间过长而无法服务等问题.老大让我准备弄个性能分析工具,便于追踪和分析平台当前的瓶颈出现在哪里.
那就搞起吧!先从代码性能分析入手.本篇博客分享的也是代码层面的性能分析.
之前用过的就有 debug_toolbar 插件. 这款插件主要可以用来DB查询语句及耗时时间,具体的文档详见:
Django Debug Toolbar
其有详细的安装配置教程.笔者使用的 HUE 是 基于 Django 1.6 的, 用最新版本的 toolbar 出现了兼容性问题.没办法,既然用不起来,就找个可以使用的版本吧.这里使用的是 django-debug-toolbar==1.3.2, 其依赖的一个库是sqlparse==0.1.9.
安装完成后,我们需要在 Odeon 中做下集成.

  1. 在 INSTALLED_APPS 中添加 debug_toolbar APP:
INSTALLED_APPS = (
    # ...
    'django.contrib.staticfiles',
    # ...
    'debug_toolbar',
)
  1. 在 MIDDLEWARE_CLASSES 中添加 debug_toolbar 中间件:
MIDDLEWARE_CLASSES = (
    # ...
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    # ...
)
  1. 在 urls.py 中添加 debug_toolbar 的 URLs:
from django.conf import settings
from django.conf.urls import include, patterns, url

if settings.DEBUG:
    import debug_toolbar
    urlpatterns += patterns('',
        url(r'^__debug__/', include(debug_toolbar.urls)),
    )

说明: Odeon 的 url位置是 desktop/core/src/desktop/urls.py

  1. 配置 Internal IPs:

Debug Toolbar 仅仅会在你指定的 IP 中展示,而我们指定需要展示的 IP可以在 INTERNAL_IPS 参数中配置。我这里的配置如下:

  INTERNAL_IPS = [
      '127.0.0.1',
      '192.168.5.20'
  ]

如果不指定, 其默认是 127.0.0.1
配置好之后,就可以使用了.

Django, Python 的性能分析工具_第1张图片
使用图例1

Django, Python 的性能分析工具_第2张图片
使用图例2

这款插件还可以分析内存使用情况.具体自己 Google 就可以啦.
接下来,我们需要去分析 Django 中哪块比较耗时.怎么办呢? 在 Python 官网上面,看到了 cProfile:
Python cProifle 文档
其可以展示出本次执行每个模块耗时时间,还可以支持排序, 返回数据条数等参数.感觉厉害,那就用起来. 在使用前,为了避免重复造轮子,看下 git 上有没有人已经做了这么一个中间件.果然!很多嘛!
Django Profile
Django Profile Middleware
我借助了其中的一个,自己改改就用起来了.详情可以见下面的截图:
Django, Python 的性能分析工具_第3张图片
cProfile 使用截图1

Django, Python 的性能分析工具_第4张图片
cProfile 使用截图2

至此,基本上算是结束了.但是,就在不经意间, 笔者发现了更好用的.哈哈!
接下来要分享的就是 KCacheGrind + django-extension 的使用.
django-extensions 的代码和文档见下:
Django extensions代码
django-extensions 文档
我使用的是其中的 profile 模块:
django-extensions profiler
通过生成 prof 文件后,我们可以借助 KCacheGrind 来查看具体的图形化信息,很直观的可以展示出调用和耗时信息. KCacheGrind 的安装在这里就不啰嗦了.直接上运行结果图:
Django, Python 的性能分析工具_第5张图片
kCacheGrind 截图1

Django, Python 的性能分析工具_第6张图片
kCacheGrind 截图2

Django, Python 的性能分析工具_第7张图片
kCacheGrind 截图3

Django, Python 的性能分析工具_第8张图片
kCacheGrind 截图4

看起来感觉更直观了。但是,KCacheGrind 虽然功能强大,但其输出的分析树貌似并不完整。不过够用了。
《Python高性能编程》 一书中,还提到了其他的一些 profile 类库:

  • runsnakerun
    感觉跟 KCacheGrind 类似。

  • line_profile
    分析到某个模块之后,可以利用此工具来更具体的分析。

  • memory_profiler
    Python 内存监控工具. Django 中可以在debug_toolbar 里面配置。

  • heapy 内存分析的工具.内存分析这块,可以看这篇博客: http://www.jianshu.com/p/2d06a1a01cc3

原文地址: http://www.cnblogs.com/scharfsinnig/p/7406696.html

你可能感兴趣的:(Django, Python 的性能分析工具)