2012-02-20 33 views
1

我試圖追查一下Django的一些性能問題。從點擊刷新到瀏覽器得到響應時,似乎有600-800毫秒的延遲。Django的性能問題

我建立一個簡單的視圖和輪廓中間件,這是視圖和結果:

視圖函數:

def test(request): 
    return HttpResponse("It works") 

輪廓結果(我用http://www.djangosnippets.org/snippets/186/):

9 function calls in 0.000 CPU seconds 

Ordered by: internal time, call count 

ncalls tottime percall cumtime percall filename:lineno(function) 
    1 0.000 0.000 0.000 0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/http/__init__.py:487(__init__) 
    1 0.000 0.000 0.000 0.000 /home/mysite/mysite/mysite/map/views.py:19(test) 
    1 0.000 0.000 0.000 0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/http/__init__.py:532(__setitem__) 
    3 0.000 0.000 0.000 0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/http/__init__.py:517(_convert_to_ascii) 
    2 0.000 0.000 0.000 0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/utils/functional.py:274(__getattr__) 
    1 0.000 0.000 0.000 0.000 /usr/lib/python2.6/Cookie.py:573(__init__) 
    0 0.000    0.000   profile:0(profiler) 


---- By file ---- 

tottime 
0.0% 0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/utils/functional.py 
0.0% 0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/http/__init__.py 
0.0% 0.000 /usr/lib/python2.6/Cookie.py 
0.0% 0.000 /home/mysite/mysite/mysite/map/views.py 

---- By group --- 

    tottime 
0.0% 0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/utils 
0.0% 0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/http 
0.0% 0.000 /usr/lib/python2.6 
0.0% 0.000 /home/mysite/mysite/mysite/map 

因此,探查器沒有返回任何數字,但Chrome報告從請求資源到實際獲得任何響應的延遲時間爲647毫秒。我到服務器的ping時間大約是50毫秒。任何想法,我可以得到更好的分析,所以我可以看到Django在哪裏造成這種放緩?

我的WSGI配置。我用uwsgi使用切諾基。

import os 
import sys 

path = '/home/mysite/mysite/mysite/' 
if path not in sys.path: 
    sys.path.append(path) 



os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler() 

我在不同的計算機以及不同的網絡上看到這種延遲(在20毫秒內)。我剛剛使用manage.py runserver時也看到了它。

+0

你有多少次請求獲得這些全爲零的分析數據? 「Chrome報告延遲時間爲647毫秒」。你有沒有測量過你的電腦有多慢?大部分網站的速度都在桌面上 - 而不是網絡上。 – 2012-02-20 13:59:59

+0

你使用什麼網絡服務器?你有沒有嘗試使用像apache-utils這樣的實際分析工具? – 2012-02-20 14:12:38

+0

django_debug toolabar – dm03514 2012-02-20 14:30:53

回答

0

由於幾個原因,Django可能會放慢速度。主要原因之一可能是不適當的或不使用Memcached。閱讀文檔以獲得有關緩存優點和缺點的想法。您也可能會發現this文章很有用。

1

看起來像你python解釋器獲取每個請求重新加載。我的猜測:延遲發生在分析之前。如果你使用mod_wsgi,你的最大請求設置是什麼?你的wsgi配置是什麼樣的?

或者,您使用了大量的JavaScript,並且延遲在您的瀏覽器中。

+0

我會在問題中發佈我的wsgi配置。目前我使用的是uwsgi,但是如果使用runserver,我會看到幾乎相同的延遲。有一個相當數量的JS,但這是等待加載頁面本身。 – Mike 2012-02-20 16:34:40

+0

上面的wsgi配置只是python代碼。我從來沒有使用過切諾基,但必須有一些配置,如最大請求。您可以使用毫秒記錄,查看cherokee對此請求的需求時間:http://www.cherokee-project.com/doc/modules_loggers_custom.html – guettli 2012-02-21 09:06:58

+0

您可以使用logging.info('start%s'%time.time ())一次在開始時,如果你的代碼,並且一次在代碼的末尾。差距有多長? Django調試工具欄也可能有幫助。但我主要用它來調試數據庫密集型視圖。 – guettli 2012-02-21 09:16:44