2009-11-07 6 views
6

J'ai actuellement un site django, et c'est un peu lent, donc je veux comprendre ce qui se passe. Comment puis-je le profil si à la différence entre:comment effectuer le profilage pour un site Web?

  • effet du réseau
  • effet de l'hébergement J'utilise
  • effet du javascript
  • effet de l'exécution côté serveur (code python) et l'accès sql.
  • tout autre effet que je ne considère pas en raison de l'énorme mal de tête que j'ai ce soir.

Bien sûr, pour certains d'entre eux je peux utiliser Firebug, mais certains effets sont corrélés (par exemple, javascript pourrait sembler lent parce qu'il fait l'accès au réseau lent)

Merci

Répondre

5

côté client:

  • chèque avec Firebug si/les composants de page prennent de temps à charger, et combien de temps le navigateur doit rendre la page après le chargement est terminé. Si tout est rapide mais que le rendu prend son temps, alors probablement votre html/css/js est le problème, sinon c'est côté serveur.
côté serveur

(je suppose que vous êtes assis sur un serveur unix-alike):

  • vérifier le serveur web avec un petit contenu statique (un petit gif ou une petite page html), en utilisant apache banc (ab, une partie du paquet webserver Apache) ou httperf, le serveur devrait être capable de répondre au moins 100 demandes par seconde (bien sûr cela dépend fortement de la taille de votre contenu de test, type de serveur web, matériel et autres, donc ne prenez cela 100 au sérieux). si cela semble bon,

  • essai django avec ab ou httperf sur une « vue statique » (qui ne marche pas utiliser un objet de base de données), si c'est lent, il est une indication que vous avez besoin de plus de puissance cpu. Vérifiez l'utilisation du processeur sur le serveur avec top. Si tout va bien, le problème pourrait être dans la façon dont le serveur web exécute le code python

  • Si le service de contenu semi-statique est correct, votre problème pourrait être la base de données ou l'IO-bound. Les problèmes de base de données sont un champ large, voici quelques conseils généraux:

    • Vérifiez le débit d'entrée/sortie avec iostat. Si vous voyez beaucoup d'écritures, vous obtenez un meilleur sous-système de disque, RAID plus rapide, disques durs SSD .. ou optimisez votre application pour écrire moins.
    • si ses beaucoup de lectures, l'hôte peut ne pas avoir assez de RAM dédiée comme tampon du système de fichiers, ou vos requêtes de base de données peuvent ne pas être optimisé
    • si i/o semble correct, la base de données peut être pas adapté à votre charge de travail ou pas correctement configuré. les requêtes lentes de journalisation et de surveillance des activités de base de données, serrures, etc peut vous donner une idée

si vous laissez-nous savoir quel matériel/logiciel que vous utilisez je pourrais être en mesure de donner des conseils plus détaillés

modifier/PS: oublié une chose: bien sur votre application pourrait avoir un mauvais design et fait beaucoup de choses inutiles/inefficaces ...

3

Jetez un oeil à la Django debug toolbar - qui vous aidera avec le code côté serveur (par exemple, quelles requêtes de base de données ont couru et combien de temps ils ont pris); et est généralement une excellente ressource pour le développement de Django.

Les autres bits spécifiques non-Django que vous pouviez profiler avec yslow.

+0

bien sûr, vous devez effectuer ce genre de profilage sur le site Web en direct, car il est généralement là où les données réelles sont, mais je pense aussi que ce n'est pas particulièrement sûr ... quelle est la solution standard? frapper le site Web avec de fausses requêtes (je me souviens qu'il y a un utilitaire pour cela)? –

+0

Vous ne devez pas faire les choses django-debug-barre d'outils sur le site Web en direct, bien que vous pouvez exécuter YSlow sur votre site en direct. J'utilise django-debug-toolbar avec le serveur de développement. Ne l'utilisez pas pour les nombres absolus ('x' prend' y' secondes), mais pour les temps relatifs des requêtes, etc. Il est particulièrement utile de travailler si une vue particulière émet plus de requêtes que nécessaire. –

1

Il existe différents outils, mais les problèmes de ce genre ne sont pas difficiles à trouver car ils sont gros.

Vous avez un problème, et lorsque vous le retirez, vous éprouverez un speedup. Supposons que l'accélération est un facteur, comme 2x. Cela signifie que le programme passe 50% de son temps à attendre la partie lente. Ce que je fais, c'est juste l'arrêter quelques fois et voir ce qu'il attend. Dans ce cas, je verrais le problème 50% des fois où je l'arrête.

D'abord, je le faire sur le côté client. Si je vois que les 50% sont dépensés en attendant le serveur, alors j'essaierais de l'arrêter du côté serveur. Ensuite, si je vois qu'il attend des requêtes SQL, je pourrais les regarder.

Ce que je suis presque certain de savoir est que plus de travail est demandé que ce qui est réellement nécessaire. Ce n'est généralement pas quelque chose d'ésotérique comme un "hotspot" ou un "algorithme". C'est habituellement quelque chose d'idiot, comme faire plusieurs requêtes quand on aurait été suffisant, afin d'éviter d'avoir à écrire le code pour sauvegarder le résultat de la première requête.

Here's an example.

0

Pour commencer; assurez-vous de savoir quelles pages sont lentes. Vous pourriez être surpris. Je recommande django_dumpslow.

Questions connexes