Le Profilage De Django
Mon application django est devenu douloureusement lent sur la production. C'est probablement en raison de certains complexes ou non indexées requêtes.
Est-il de django-ish sorte de profil de mon application?
Vous devez vous connecter pour publier un commentaire.
Essayer 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, lire les recommandations sur Django performance dans Accès à la base de l'optimisation 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:
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 milliers 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 la lenteur. 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:
https://github.com/django-extensions/django-extensions/blob/master/docs/runprofileserver.rst
Viens de le faire et le tour est joué:
python manage.py runprofileserver --prof-path=/path/to/dir
, suivez ce blog: darkcoding.net/software/profiling-django-for-cpu-bound-apps.Pour le profilage de données d'accès (qui est l'endroit où le goulot d'étranglement est la plupart du temps) découvrez django-live-profiler. Contrairement à Django Debug Toolbar il recueille des données à travers toutes les demandes simultanément et vous pouvez l'exécuter dans la production sans trop de surcharge de performances ou de l'exposer votre application internes.
Plug sans vergogne ici, mais j'ai récemment fait https://github.com/django-silk/silk à cette fin. C'est un peu similaire à django de la barre d'outils, mais avec l'histoire, profilage de code et plus de précision, le 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
de 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:
Pour visualiser le journal, j'ai utilisé hotshot2cachegrind:
Mais il y a d'autres options:
Lorsque les points de vue ne sont pas le HTML, par exemple JSON, utilisation simple middleware méthodes de profilage.
Voici quelques exemples:
https://gist.github.com/1229685 de capture de tous les appels sql est allé dans la vue
https://gist.github.com/1229681 - profil de tous les appels de méthode utilisée pour créer la vue