Moja aplikacja django stała się boleśnie powolna podczas produkcji. Prawdopodobnie jest to spowodowane złożonymi lub niezindeksowanymi zapytaniami.
Czy jest jakiś django sposób na profilowanie mojej aplikacji?
Wypróbuj pasek narzędzi debugowania Django . Pokaże Ci, jakie zapytania są wykonywane na każdej stronie i ile czasu one zajmują. To naprawdę przydatne, potężne i łatwe w użyciu narzędzie.
Przeczytaj również zalecenia dotyczące wydajności Django w optymalizacji dostępu do bazy danych z dokumentacji.
Oraz wskazówki dotyczące wydajności Django autorstwa Jacoba Kaplan-Mossa.
Po prostu wpisz w google „django-profiling”, a otrzymasz te linki (i nie tylko):
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/
Osobiście używam metody oprogramowania pośredniego - tj. Każdy użytkownik może przełączać flagę „profilowania” przechowywaną w sesji, a jeśli moje oprogramowanie pośredniczące do profilowania zauważy, że flaga została ustawiona, używa modułu hotshot w języku Python w następujący sposób:
EDYCJA: Do profilowania zapytań SQL http://github.com/robhudson/django-debug-toolbar wspomniane przez Konstantina to fajna rzecz - ale jeśli twoje zapytania są naprawdę wolne (prawdopodobnie dlatego, że są ich setki lub tysiące), Będziesz czekać szaloną ilość czasu, aż zostanie załadowana do przeglądarki - a wtedy przeglądanie będzie trudne z powodu spowolnienia. Ponadto django-debug-toolbar z założenia nie jest w stanie zapewnić użytecznego wglądu w wewnętrzne elementy żądań AJAX.
EDIT2: django-extensions ma wbudowane świetne polecenie profilujące:
https://github.com/django-extensions/django-extensions/blob/master/docs/runprofileserver.rst
Po prostu zrób to i voila:
źródło
python manage.py runprofileserver --prof-path=/path/to/dir
, śledź ten blog: darkcoding.net/software/profiling-django-for-cpu-bound-apps .hotshot
został wycofany i usunięty w Pythonie 3, więc ta odpowiedź iProfilingDjango
strona Wiki mogą nie być już aktualne w 20202.W celu profilowania dostępu do danych (czyli tam, gdzie najczęściej występuje wąskie gardło), wypróbuj django-live-profiler . W przeciwieństwie do Django Debug Toolbar zbiera dane ze wszystkich żądań jednocześnie i możesz uruchomić go w środowisku produkcyjnym bez zbytniego obciążenia wydajności lub ujawniania wewnętrznych elementów aplikacji.
źródło
Bezwstydna wtyczka tutaj, ale ostatnio zrobiłem w tym celu https://github.com/django-silk/silk . Jest trochę podobny do paska narzędzi django, ale z historią, profilowaniem kodu i bardziej szczegółową kontrolą nad wszystkim.
źródło
Dla wszystkich fanów KCacheGrind bardzo łatwo jest używać powłoki w połączeniu z fantastycznym testem Django
Client
do generowania dzienników profili w locie, szczególnie w produkcji. Używałem tej techniki już kilkakrotnie, ponieważ ma ona lekki akcent - nie są wymagane żadne nieznośne oprogramowanie pośredniczące ani aplikacje Django innych firm!Na przykład, aby profilować określony widok, który wydaje się działać wolno, możesz otworzyć powłokę i wpisać ten kod:
Aby zwizualizować wynikowy dziennik, użyłem hotshot2cachegrind:
Ale są też inne opcje:
źródło
Gdy widoki nie są w formacie HTML, na przykład JSON, do profilowania użyj prostych metod oprogramowania pośredniego.
Oto kilka przykładów:
https://gist.github.com/1229685 - przechwytywanie wszystkich wywołań sql trafiło do widoku
https://gist.github.com/1229681 - profiluj wszystkie wywołania metod używane do tworzenia widoku
źródło
Musiałem ostatnio profilować aplikację Django i wypróbowałem wiele z tych sugestii. Skończyło się na tym, że zamiast tego użyłem pyinstrument , który można dodać do aplikacji Django za pomocą pojedynczej aktualizacji listy oprogramowania pośredniego i zapewnia widok czasów na stosie.
Krótkie podsumowanie moich doświadczeń z innymi narzędziami:
pyinstrument
cProfile
czasów i automatycznie wyświetla czasy Ajax, z których oba mogą być naprawdę pomocne.W porównaniu z innymi narzędziami, które wypróbowałem,
pyinstrument
był znacznie łatwiejszy w instalacji i obsłudze.źródło