Python, Django 性能分析工具的使用

最近接手的 Apache HUE 項目性能出現了問題,線上常常出現響應時間過長或由於時間過長而沒法服務等問題.老大讓我準備弄個性能分析工具,便於追蹤和分析平臺當前的瓶頸出如今哪裏.
那就搞起吧!先從代碼性能分析入手.本篇博客分享的也是代碼層面的性能分析.
以前用過的就有 debug_toolbar 插件. 這款插件主要能夠用來DB查詢語句及耗時時間,具體的文檔詳見:
Django Debug Toolbar
其有詳細的安裝配置教程.筆者使用的 HUE 是 基於 Django 1.6 的, 用最新版本的 toolbar 出現了兼容性問題.沒辦法,既然用不起來,就找個可使用的版本吧.這裏使用的是 django-debug-toolbar==1.3.2, 其依賴的一個庫是sqlparse==0.1.9.
安裝完成後,咱們須要在 Odeon 中作下集成.html

  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.pypython

  1. 配置 Internal IPs:

Debug Toolbar 僅僅會在你指定的 IP 中展現,而咱們指定須要展現的 IP能夠在 INTERNAL_IPS 參數中配置。我這裏的配置以下:git

INTERNAL_IPS = [
      '127.0.0.1',
      '192.168.5.20'
  ]

若是不指定, 其默認是 127.0.0.1
配置好以後,就可使用了.
使用圖例1
使用圖例2
這款插件還能夠分析內存使用狀況.具體本身 Google 就能夠啦.
接下來,咱們須要去分析 Django 中哪塊比較耗時.怎麼辦呢? 在 Python 官網上面,看到了 cProfile:
Python cProifle 文檔
其能夠展現出本次執行每一個模塊耗時時間,還能夠支持排序, 返回數據條數等參數.感受厲害,那就用起來. 在使用前,爲了不重複造輪子,看下 git 上有沒有人已經作了這麼一箇中間件.果真!不少嘛!
Django Profile
Django Profile Middleware
我藉助了其中的一個,本身改改就用起來了.詳情能夠見下面的截圖:
cProfile 使用1
cProfile 使用2
至此,基本上算是結束了.可是,就在不經意間, 筆者發現了更好用的.哈哈!
接下來要分享的就是 KCacheGrind + django-extension 的使用.
django-extensions 的代碼和文檔見下:
Django extensions代碼
django-extensions 文檔
我使用的是其中的 profile 模塊:
django-extensions profilergithub

經過生成 prof 文件後,咱們能夠藉助 KCacheGrind 來查看具體的圖形化信息,很直觀的能夠展現出調用和耗時信息.KCacheGrind 的安裝在這裏就不囉嗦了.直接上運行結果圖:
kCacheGrind_01
kCacheGrind_02
kCacheGrind_03
看起來感受更直觀了.可是,KCacheGrind 雖然功能強大,但其輸出的分析樹貌似並不完整.不過夠用了.
< > 一書中,還提到了其餘的一些 profile 類庫: sql

相關文章
相關標籤/搜索