2012-02-20 3 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 мс от запроса ресурса, чтобы получить какой-либо ответ. Время моего пинга на сервере составляет около 50 мс. Любые идеи, как я могу улучшить профилирование, чтобы я мог видеть, где в Django вызывает это замедление?

Моя конфигурация WSGI. Я использую Cherokee с 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 runningerver.

+0

Сколько раз вы делали запрос на получение этих профилирующих чисел, которые являются нулями? «Chrome сообщает о задержке 647 мс». Вы оценили, насколько медленным является ваш компьютер? Большая часть медлительности веб-сайта находится на рабочем столе, а не в сети. –

+0

Какой веб-сервер используется? Вы пытались использовать фактические инструменты для профилирования, такие как apache-utils? –

+0

django_debug toolabar – dm03514

ответ

0

Возможно, Django замедляется из-за нескольких причин. Одна из основных причин может быть неуместной или не использовать Memcached. Пройдите через документы, чтобы получить представление о плюсах и минусах использования кеша. Вы также можете найти статью this.

1

Похоже, что интерпретатор python перезагружается для каждого запроса. Мое предположение: Задержка происходит до профилирования. Если вы используете mod_wsgi, какова максимальная настройка ваших запросов? Как выглядит ваша конфигурация wsgi?

Или вы используете много JavaScript и задержка находится в вашем браузере.

+0

Я отправлю конфигурацию wsgi в вопрос. В настоящее время я использую uwsgi, но я вижу почти идентичную задержку, если я использую серверы. Существует приличное количество JS, но это ожидание загрузки самой страницы. – Mike

+0

Вышеупомянутый конфигуратор wsgi - это только код python. Я никогда не использовал cherokee, но должна быть какая-то конфигурация, такая как максимальные запросы. Вы можете использовать ведение протоколов в миллисекундах, чтобы узнать, сколько времени требуется для этого запроса cherokee: http://www.cherokee-project.com/doc/modules_loggers_custom.html – guettli

+0

Вы можете использовать logging.info ('start% s'% time.time()) один раз при запуске, если ваш код и один раз в конце вашего кода. Как долго разрыв? Панель инструментов Django Debug также может помочь.Но я использую его в основном для отладки баз данных с интенсивным просмотром. – guettli

Смежные вопросы