2009-04-14 90 views
13

我有興趣測試我的django應用程序的性能,因爲我走了,獲得逐行性能數據的最佳方法是什麼?基準django應用程序

note:谷歌搜索這回報很多人基準django本身。我不是在尋找django的基準測試,我試圖測試我寫的django應用的性能:)

謝謝!

編輯:通過「逐行」我只是說個人計時功能,調用數據庫等,找出瓶頸在哪裏上非常細緻

+0

請定義「逐行性能數據」 – 2009-04-14 15:50:24

+0

對不起,我的意思是測量每行代碼運行需要多少時間,以及每個函數的時間,db調用等。 – Jiaaro 2009-04-14 15:53:03

回答

7

有兩層這一點。我們的測試中有大部分#1已經到位。我們即將開始#2。

  1. Django孤立。普通的Django單元測試在這裏運行良好。創建一些循環遍歷少數(少於6個)「典型」用例的測試。得到這個,發佈,等等。收集時間數據。這不是真正的網絡性能,但它是一個易於使用的測試場景,您可以使用它進行調整。

  2. 您的整個網絡堆棧。在這種情況下,您需要一個運行Squid,Apache,Django,MySQL等常規服務器。您需要第二臺計算機作爲客戶端,通過urllib2來執行您的網站,執行少數(少於6個)「典型」用例。得到這個,發佈,等等。收集時間數據。這仍然不是「真正」的網絡性能,因爲它不是通過互聯網,但它與您在沒有真正精心設置的情況下得到的一樣接近。

請注意,#2(端到端)包含大量的性能緩存。如果您的客戶端腳本正在做類似的工作,緩存將非常有益。如果您的客戶端腳本每次都做獨特的事情,緩存將不太有利。

最難的部分是確定「典型」工作負載是什麼。這不是功能測試,因此工作負載不必包含所有內容。而且,客戶端運行的併發會話越多,它變得越慢。當您的測試客戶端是處理速度最慢的部分時,不要試圖優化您的服務器。


編輯

如果 「行由行」 的意思是 「分析」,好了,你得把一個Python Profiler運行。

https://docs.python.org/library/profile.html

注意,有大量的緩存在Django的ORM層。因此,運行一個視圖函數6次以獲得一組有意義的度量是不明智的。您必須運行「典型」操作集,然後在配置文件中找到熱點。

通常,您的應用程序很容易優化 - 您不應該做太多。您的視圖功能應該很短,無需處理。同樣,你的表單和模型方法的功能應該很短。

+0

謝謝,我是指的是大多數......我懷疑單元測試可能是答案! bott ... S.洛特你一直在回答我發佈的幾乎所有問題,非常感謝:) 我是大學的高年級學生,我在堆棧溢出方面學到了很多 – Jiaaro 2009-04-14 15:55:38

5

Django應用程序逐行獲取性能數據(分析)的一種方法是使用WSGI中間件組件,如repoze.profile

假設你正在使用的mod_wsgi和Apache,你可以repoze.profile插入到你的應用程序是這樣的:

... 
application = django.core.handlers.wsgi.WSGIHandler() 
... 
from repoze.profile.profiler import AccumulatingProfileMiddleware 
application = AccumulatingProfileMiddleware(
    application, 
    log_filename='/path/to/logs/profile.log', 
    discard_first_request=True, 
    flush_at_shutdown=True, 
    path='/_profile' 
) 

現在你可以將瀏覽器指向/ _profile查看您的個人資料。當然這不適用於mod_python或內部的Django服務器。