Ma demande de django est devenu très lent sur la production. Prolly, c’est à cause de certaines requêtes complexes ou non indexés.
Y a-t-il une manière de django-ish pour profiler mon application ?
Ma demande de django est devenu très lent sur la production. Prolly, c’est à cause de certaines requêtes complexes ou non indexés.
Y a-t-il une manière de django-ish pour profiler mon application ?
Essayez le Django Debug Toolbar. Il va vous montrer ce que les requêtes sont exécutées sur chaque page et combien de temps ils prennent. Elle est vraiment utile, puissant et facile à utiliser l'outil.
Aussi, lisez les recommandations sur Django de performance dans la Base de données optimisation de l'accès à partir de la documentation.
Et Django conseils de performances par Jacob Kaplan-Moss.
Il suffit de taper "django-profilage" sur google, vous obtiendrez ces liens (et plus):
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/
Personnellement, je suis en utilisant le middleware approche - c'est à dire chaque utilisateur peut basculer d'un "profilage" drapeau stockées dans une session, et si mon profilage middleware remarque que l'indicateur a été défini, il utilise Python hotshot module comme ceci:
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
EDIT: Pour le profilage des requêtes SQL http://github.com/robhudson/django-debug-toolbar mentionné par Konstantin est une bonne chose - mais si vos questions sont vraiment très lent (probablement parce qu'il y a des centaines ou des thousends d'entre eux), alors vous serez en attente quantité folle de temps jusqu'à ce qu'elle est chargée dans un navigateur, puis ça va être dur à parcourir en raison de slowliness. Aussi, django-debug-toolbar est par nature incapable de donner un aperçu utile de la structure interne des requêtes AJAX.
EDIT2: django-extensions a une grande profilage de commande année de construction:
http://packages.python.org/django-extensions/runprofileserver.html
Viens de le faire et le tour est joué:
$ mkdir /tmp/my-profile-data
$ ./manage.py runprofileserver --kcachegrind --prof-path=/tmp/my-profile-data
Pour profiler les accès aux données (qui sont où le goulot d’étranglement est la plupart du temps) Découvrez django-vivre-profiler. Contrairement à Django Debug Toolbar il recueille des données sur toutes les demandes en même temps et vous pouvez l’exécuter en production sans trop grande charge de performances ou de l’exposer votre app internals.
Fiche sans vergogne ici, mais j’ai fait récemment https://github.com/mtford90/silk à cet effet. C’est un peu similaire à la barre d’outils de django, mais avec une histoire, code profilage et plus fine à grain contrôle sur tout.
Pour tout ce que vous KCacheGrind fans, je trouve que c'est très facile à utiliser le shell en tandem avec Django test fantastique Client
pour la génération de profil de journaux à la volée, en particulier dans la production. J'ai utilisé cette technique maintenant, à plusieurs reprises, car il a un toucher léger - pas fichus de middleware ou d'un tiers des Django d'applications sont nécessaires!
Par exemple, le profil d'un point de vue particulier qui semble être en cours d'exécution lente, vous pouvez casser la coquille ouverte et tapez ce code:
from django.test import Client
import hotshot
c = Client()
profiler = hotshot.Profile("yourprofile.prof") # saves a logfile to your pwd
profiler.runcall(c.get, "/pattern/matching/your/view/")
profiler.close()
Pour visualiser le journal, j'ai utilisé hotshot2cachegrind:
Mais il y a d'autres options:
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.