Профилирование Django

Мое django приложение стало крайне медленным на производстве. Вероятно, это происходит из-за некоторых сложных или неиндексируемых запросов.

Там какой-либо django-выход путь должен представить мое приложение?

93
задан sharjeel 13 January 2019 в 08:31
поделиться

2 ответа

Попробуйте панель инструментов отладки Django . Он покажет вам, какие запросы выполняются на каждой странице и сколько времени они занимают. Это действительно полезный, мощный и простой в использовании инструмент.

Также прочтите рекомендации по производительности Django в Оптимизация доступа к базе данных в документации.

И Советы по производительности Django от Джейкоба Каплан-Мосса.

75
ответ дан 24 November 2019 в 06:19
поделиться

Просто введите "django-profiling" в Google, и вы получите эти (и другие) ссылки:

http: //code.djangoproject. com / wiki / ProfilingDjango

http://code.google.com/p/django-profiling/

http://www.rkblog.rk.edu.pl/w/p/django-profiling-hotshot -and-kcachegrind /

Лично я использую подход промежуточного программного обеспечения - то есть каждый пользователь может переключать флаг «профилирования», хранящийся в сеансе, и если мое промежуточное программное обеспечение профилирования замечает, что флаг установлен, он использует Python hotshot вроде этого:

def process_view(self, request, view_func, view_args, view_kwargs):

     # setup things here, along with: settings.DEBUG=True 
     # to get a SQL dump in connection.queries

     profiler = hotshot.Profile(fname)
     response = profiler.runcall(view_func, request, *view_args, **view_kwargs)
     profiler.close()

     # process results

     return response

РЕДАКТИРОВАТЬ: для профилирования SQL-запросов http://github.com/robhudson/django-debug-toolbar , упомянутый Константином, - это хорошо, но если ваш запросы действительно медленные (вероятно, потому, что их сотни или тысячи), тогда вы будете ждать безумное количество времени, пока они не загрузятся в браузер, и тогда будет сложно просматривать из-за медленности. Кроме того, django-debug-toolbar по своей конструкции не может дать полезную информацию о внутреннем устройстве запросов AJAX.

РЕДАКТИРОВАТЬ2: django-extensions имеет отличную встроенную команду профилирования:

https://github.com/django-extensions/django-extensions/blob/master/docs/runprofileserver.rst

Просто сделайте это и вуаля:

$ mkdir /tmp/my-profile-data
$ ./manage.py runprofileserver --kcachegrind --prof-path=/tmp/my-profile-data
27
ответ дан 24 November 2019 в 06:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: