2012-02-09 3 views
0

J'ai un site django qui a seulement une interface d'administration, puisque c'est une chose interne.Pourquoi mon site django/psql est-il si incroyablement lent?

Des pages simples se chargent presque instantanément, comme par exemple une table de 10 éléments.

Mais une page avec beaucoup d'inlines et ainsi de suite prendra 5-10 secondes à charger, parfois même plus longtemps. C'est presque inutilisable.

La base de données n'est pas une base de données par tout chemin. J'ai quelques douzaines de modèles et aucune table n'a plus de 500 entrées.

Exécution d'Ubuntu 10.04 sur un Xeon quad-core récent avec 12 Go de RAM.

Les problèmes se produisent avec le serveur de production (mod_wsgi) et avec le serveur de développement. Généralement pire avec le serveur de production, mais les deux sont très lents.

Pendant le délai, un noyau de processeur maximum pour apache (si j'utilise le serveur de production) ou python (si j'utilise le serveur de développement).

J'ai essayé de jouer avec WSGIDaemonProcess, en changeant le nombre de threads et de processus, mais en vain. Ci-dessous est mon fichier de configuration apache, mais comme je l'ai dit j'ai des problèmes avec le serveur de dev aussi, donc ce n'est pas vraiment un problème d'apache.

Merci pour toute aide. Toutes mes excuses pour une mauvaise utilisation de la terminologie, etc. Je suis un programmeur C et MATLAB et je ne connais pas vraiment grand-chose des serveurs, réseaux, bases de données ou python. Aussi, je me rends compte qu'il y a plusieurs threads sur les réponses django lentes, et je les ai toutes lues, mais je n'ai rien trouvé qui aide ma situation. Merci!

WSGIDaemonProcess MY_ACTUAL_IP_ADDRESS user=MY_USERNAME group=MY_USERNAME threads=4 
WSGIProcessGroup MY_ACTUAL_IP_ADDRESS 

WSGIScriptAlias /wsgi /neuroling/projects/neuroxy/neuroxy_project/neuroxy.wsgi 
<Directory /neuroling/projects/neuroxy/neuroxy_project/> 
    Order allow,deny 
    Allow from all 
</Directory> 

Alias /media/ /var/www/media/ 
Alias /static/ /var/www/static/ 

<Directory /var/www/static> 
Order deny,allow 
Allow from all 
</Directory> 

<Directory /var/www/media> 
Order deny,allow 
Allow from all 
</Directory> 
+0

Que voulez-vous dire par "beaucoup d'inlines?" En outre, essayez d'ouvrir la page, enregistrez le contenu (Ctrl + S) en tant que fichier HTML sur votre bureau, puis rouvrez à partir du bureau. Si c'est encore lent, c'est le navigateur, s'il est rapide, c'est le serveur et on peut approfondir. Je suis sûr que c'est le serveur si le processeur est embourbé, mais juste pour être absolument sûr. – Furbeenator

+0

Sur le type de page le plus lent, il y a six inlines, qui ont généralement entre zéro et deux entrées. Mais sur une autre page qui prend aussi quelques secondes à charger, il y a juste un en ligne, qui a généralement environ 10 entrées. J'ai enregistré la page Web comme vous l'avez suggéré, et il peut ensuite être ouvert instantanément avec FireFox. Alors oui, c'est le serveur, pas le navigateur. Merci pour toute aide! – smwilsonau

+0

Essayez de publier au moins une partie du code de vue qui renvoie le contexte au modèle. Peut-être qu'il y a des boucles incorporées ou une autre séquence de code parabolique. Assurez-vous simplement qu'il n'y a pas d'informations confidentielles. – Furbeenator

Répondre

1

Avez-vous essayé la barre d'outils de débogage de Django pour essayer d'isoler le point lent.

Vous pouvez également utiliser les outils de surveillance des performances des applications de production tels que New Relic.

http://blog.newrelic.com/2011/11/08/new-relic-supports-python/

http://www.newrelic.com

New Relic a une période d'essai de deux semaines avec toutes les fonctionnalités disponibles. Pendant ce temps, faites bon usage de la dégradation des performances et ralentissez les fonctionnalités de traçage des transactions pour résoudre le problème. Après deux semaines, il descendra au niveau de la fonctionnalité d'abonnement gratuit et vous perdrez les traces de transactions lentes, mais vous aurez toujours des pannes de performances par rapport aux transactions Web.

+0

Ok, j'essaye d'installer la barre d'outils de débogage, je ne peux pas l'obtenir, je l'ai ajouté à settings.py: import sys path = '/...../django-debug -toolbar-944bfd8/debug_toolbar ' si le chemin n'est pas dans sys.path: sys.path.append (chemin) et le code de la première réponse ici: [http://stackoverflow.com/questions/6390310/how-do -i-voir-le-django-debug-barre d'outils] (http://stackoverflow.com/questions/6390310/how-do-i-see-the-django-debug-tool barre) – smwilsonau

+0

Il échoue sur la ligne 'debug_toolbar.middleware.DebugToolbarMiddleware', quand j'ajoute cela à la MIDDLEWARE_CLASSES ... suis-je censé définir le chemin ou quelque chose? – smwilsonau

3

J'ai résolu ceci maintenant. J'ai fait une copie de ma base de données et supprimé la plupart des données, pour voir si cela affecterait la vitesse. En effet, il a cessé d'être lent. Cela m'a aidé à comprendre le fait que le problème était lié à la base de données (ou à l'accès à celle-ci), plutôt qu'à Apache ou quelque chose comme ça. Alors j'ai activé la connexion à postgresql et regardé les journaux. Il y avait littéralement des milliers d'instructions SQL bizarres envoyées qui ne semblaient pas pertinentes. Une inspection plus approfondie a révélé qu'ils étaient tous envoyés pour remplir une boîte de sélection ForeignKey qui contenait des milliers d'entrées. Seules quelques-unes de ces entrées sont réellement possibles dans un cas donné, mais il semble vraiment compliqué de filtrer les boîtes de sélection dans django et je ne l'ai pas encore fait. Mais ce que j'ai fait était de spécifier ces champs comme raw_id_fields, ce qui empêche la création d'une boîte de sélection. Cela a complètement résolu le problème de la lenteur.

Merci à ceux qui ont donné des suggestions sur ma question. J'espère que cette réponse sera utile aux autres.

+0

Wow, c'est étrange! Eh bien, je suis content que vous l'ayez compris. :-) – Furbeenator

+0

Eh bien merci à vous de me donner la suggestion de considérer le rôle de la base de données ... – smwilsonau

Questions connexes