Comment pouvez-vous savoir ce que w3wp.exe fait? (ou comment diagnostiquer un problème de performance)

42

Je rencontre un problème de performances sur un site que nous avons créé et je ne sais pas trop comment commencer à le diagnostiquer.

La description courte est: Nous avons un très petit site ( http://hearablog.com ) avec très peu de trafic, dans un serveur dédié de merde, le processeur est toujours très haut, parfois il reste à 100% pendant quelques minutes, et w3wp.exe prend la majeure partie. Un scénario typique est que w3wp.exe nécessite 60% et SQL Server environ 30%. Notre DB est assez petite aussi.

Description longue et plus de détails:

  • Le site est hébergé sur un serveur très nul par Cari.Net. Dès le début, nous avons eu le sentiment que le serveur ne se comportait pas correctement, car certaines choses prendraient trop de temps. Cela pourrait donc être un problème de configuration dès le départ. Il se peut également que nous obtenions un serveur virtuel alors que nous sommes supposés en avoir un dédié, bien que nous n’ayons aucune preuve qui indiquerait cela, sauf que le serveur a tendance à être assez lent.

  • Le serveur est Windows 2008 Standard 64 bits, avec SQL 2008 Express

  • Le matériel est un Celeron 2,80 GHz, 1 Go de RAM

  • Le site Web est développé en ASP.Net MVC, utilisant Entity Framework pour l’accès aux données.

  • Maintenant, c’est un matériel plutôt nul, mais j’ai eu d’autres serveurs avec ces types, avec un HW équivalent (ou pire), et les performances sont bien meilleures que celles-ci. Cela dit, les autres serveurs ont W2003 et SQL2005, et j'utilise ASP.Net "WebForms" 2.0, pas de MVC, pas de LINQ, pas de EF; Je ne suis donc pas sûr que si aller en 2008 / les autres choses signifie une grosse pénalité de performance est attendue.

  • Je sers régulièrement des fichiers MP3 (5-20 Mo), ce qui est une charge un peu inhabituelle, peut-être que cela pose certains problèmes?
    Est-ce que cela provoquerait w3wp à utiliser beaucoup de processeur?

  • L'utilisation du disque semble très faible. La mémoire est généralement d'environ 90%, mais l'utilisation du disque semble indiquer que la pagination est faible.

  • Chaque jour, je reçois des tonnes de courriels sur les délais d'attente SQL, pour des requêtes de plus de 30 secondes, bien que toutes nos requêtes soient assez simples (ou devraient l'être, mais EF est peut-être en train de tout gâcher).

Voici à quoi ressemble le moniteur de ressources dans l'un de ces "sprints" à 100% de CPU, au cas où il y aurait quelque chose d'utile là-bas.

texte alternatif

Et un instantané de quelques compteurs de performance: texte alternatif

Maintenant, ce qui me trouble le plus, c’est que l’utilisation du processeur de w3wp est tellement élevée. Ça ne devrait pas vraiment faire grand chose ... Alors mes questions sont ...

  • Y a-t-il un moyen de savoir "quoi" il fait? Peut-être même le profiler?
  • Des compteurs de performance que je devrais regarder?
  • Est-ce à prévoir, étant donné cette configuration matérielle / logicielle?
  • Est-ce que cela pourrait être causé par une sorte d'échec de la configuration, par où commenceriez-vous à chercher?

Merci beaucoup.
Daniel Magliola

Daniel Magliola
la source

Réponses:

42

Vous pouvez également utiliser l'interface utilisateur des processus de travail dans le Gestionnaire des services Internet, inspecter les demandes en cours d'exécution et voir si elles se bloquent. Ouvrez le Gestionnaire IIS-> Cliquez sur le serveur dans l'arborescence-> Double-cliquez sur l'icône Processus de travail-> Double-cliquez sur le processus de travail consommant de la CPU pour voir les demandes en cours d'exécution en temps réel, afin de voir quel module prend du temps.

Pensez également à utiliser le suivi des demandes ayant échoué pour suivre une partie du temps par demande pour voir où elles prennent beaucoup de temps.

Carlos Aguilar Mares
la source
2
C’est prometteur, cela ressemble EXACTEMENT à ce que je veux voir, mais en réalité ces écrans sont vides. Apparemment, il ne montre que les demandes qui prennent plus d’une seconde, d’après le grand panneau en haut, et aucune de nos demandes n’est évidemment, car la liste est vide. Des idées sur la façon de faire apparaître plus de demandes? Comment abaisser le filtre 1s? Merci!
Daniel Magliola
1
Vous pouvez taper 0 dans le filtre et cliquer sur Go pour le définir sur 0 seconde. En outre, vous pouvez exécuter une invite de commande élevée "demandes de liste% windir% \ system32 \ inetsrv \ appcmd.exe"
Carlos Aguilar Mares
1
Merci beaucoup Carlos! C’est ce que j’ai fini par trouver pour trouver la requête (un cron que nous avons) qui détruisait mon serveur toutes les 5 minutes (elle prenait 3,5 minutes pour être exécutée, c’était donc presque constamment à 100% du processeur). Merci!!!
Daniel Magliola
1
Cette interface m'a indiqué quelle URL avait été consultée. Malheureusement, il s'agit d'un POST sur un service Web asmx, et ces données ne sont pas disponibles. (headbang)
Ross Presser le
5

Ok, pour commencer - le serveur est vraiment nul. Mais cela devrait suffire.

  • Pour la virtualisation, vérifiez vos pilotes. Je ne connais aucune plate-forme de virtualisation qui cache le processeur (et je suppose que quelqu'un met en place un hyper-v ou un esx sur un céleron), mais les pilotes de disque, etc. sont une indication.

  • Le processeur ne devrait pas être si élevé. Malheureusement, avec cette mémoire vive, vous êtes à peu près rôti. Si vous commencez à ajouter un profileur, vous en perdirez la mémoire.

Je voudrais:

  • Vérifiez les journaux pour les choses en cours d'exécution à ce moment.
  • Mettez à niveau le système d'exploitation vers 2008 R2 - BEAUCOUP plus d'informations y sont disponibles.

Pour tester:

  • Dans votre environnement de développement, effectuez une copie du site et exécutez des tests de performances.
  • Faire le profilage là-bas.
  • Utilisez le suivi des demandes échouées pour savoir quelles demandes ont échoué.

http://learn.iis.net/page.aspx/266/troubleshooting-failed-requests-using-tracing-in-iis-7/

a certains commencent là-bas. Cela peut vous donner un indice au cas où les problèmes sont plus "hm" - "catégorisables".

Je voudrais également conserver des journaux de performance à plus long terme. Méfiez-vous de vos E / S (secondes / lecture, Secondes / écriture sont à peu près les seules pertinentes). Tout le reste est trop vague, mais une fois que votre IO commence à prendre plus de temps qu'il ne le devrait, les disques prennent du retard.

Je voudrais exclure un problème de configuration à ce stade - au moins comme indicateur principal. Quelque chose utilise vos ressources W3p, vous devez maintenant savoir ce que c'est.

En général, ce n’est pas un serveur que j’aimerais aimer physiquement - c’est tellement petit, cela n’a aucun sens de le faire à mon humble avis. Le virtuel serait mieux;)

TomTom
la source
Merci beaucoup pour votre réponse. Quelques questions: Quels journaux vérifieriez-vous pour l'exécution de tâches en ce moment? (désolé s'il s'agit d'une question de débutant) - Mise à niveau du système d'exploitation: nous pourrions essayer cela, mais je crains que cela ne casse quelque chose, peut-être, jusqu'à quel point est-ce sûr? - Environnement de développement: le problème est que cela fonctionne bien dans mon environnement de développement. Le processeur est négligeable, les requêtes n'échouent pas, etc.
Daniel Magliola
En ce qui concerne les journaux d'E / S: je viens d'ajouter les compteurs que vous mentionnez et ils sont tous à 0 alors que le processeur est élevé. Je viens d'ajouter une capture d'écran de certains compteurs de performances que je regarde. Je sais qu'un instantané ne raconte pas toute l'histoire, mais ces valeurs ont tendance à être assez stables. Pensez-vous que le nombre de connexions actuelles (pour lesquelles je n’ai aucune explication) pourrait être un problème? Des idées sur la façon de comprendre ce que ces connexions demandent / font? Vous pensez que d'autres compteurs peuvent être utiles pour diagnostiquer quelque chose comme ça?
Daniel Magliola
Eh bien, R2 est assez sûr. J'ai tout mis à niveau et je n'ai jamais eu de problème. Quoi qu'il en soit, il s’agit d’un problème lié au processeur qui peut être terrible, surtout si vous n’avez pas assez de RAM pour installer un profileur. Je voudrais réellement tenter une réinstallation complète. Oui, c'est nul, mais cela signifie que vous pouvez installer R2 et voir si le problème persiste. La mauvaise chose est que vous n’avez pas de système de réserve, vous ne pouvez donc pas déterminer si le problème est "local" ou plus général. Vous pouvez également arrêter IIS, effacer tous les dossiers temporaires en cours d'utilisation, également
TomTom
pour la compilation et voir ce qui se passe lorsque vous redémarrez. Avec R2, vous pouvez voir si / quels fichiers sont maintenus ouverts par IIS. S'agit-il d'une application Web locale ou existe-t-il également si tous les sites Web sont arrêtés? Prochaine chose à faire: éteindre tous les sites et trouver celui qui casse les choses.
TomTom
Enfin, le problème des serveurs virtuels est que, autant que je sache, nous finissons par payer plus ou le même prix pour le même matériel. De plus, la facture de la bande passante est mortelle (gardez à l’esprit que nous servons des fichiers audio). Nous allons passer à un serveur plus grand si nous devons le faire, mais honnêtement, avec le trafic que nous avons, il doit y avoir un problème, nous ne devrions pas utiliser 100% de CPU à ce jour ..
Daniel Magliola
4

Vous pouvez essayer d'utiliser un programme appelé Process Explorer pour surveiller des threads individuels s'exécutant sous le processus w3wp. Cela devrait vous permettre de voir quel fil cause tous les dégâts.

Joe Phillips
la source
3

J'ai eu beaucoup de chance en utilisant l'outil de diagnostic de débogage de Microsoft pour vider mon processus w3wp, puis pour vérifier les threads et les traces de pile pour les éléments qui se bloquaient. Il va même vous dire la page demandée qui a généré le fil qui est SUPER sympa .

http://www.microsoft.com/en-us/download/details.aspx?id=26798

jocull
la source
1

Je suis d'accord avec TomTom sur toute la ligne, en particulier en ce qui concerne les gains de kilométrage d'un virtuel à ce stade. Le débogage / profilage local pour affiner le problème est la bonne chose à faire.

Je vais mettre mon chapeau et ma cape Karnak The Magnificent et demander la première enveloppe. Ram rébellion. Qu'est-ce que vous obtenez lorsque vous mettez le système d'exploitation, ASP.NET et un gourmand SQL Server Express en 1 Go.

Je pense que votre problème est que SQL Server Express récupère toute la RAM disponible pour un pool de mémoire tampon et est lent à le libérer. Voir http://support.microsoft.com/kb/321363 pour plus d'informations. En outre, IIS dispose d'un cache par défaut de 256 Mo que vous devrez peut-être modifier ( https://stackoverflow.com/questions/2853135/controlling-asp-net-output-cache-memory-usage ). Debug Diagnostics est un excellent outil pour résoudre ce problème (ok, probablement un sledgehammer).

http://technet.microsoft.com/en-us/library/bb742546.aspx est un article assez décent à regarder. http://social.technet.microsoft.com/forums/en-US/sharepointadmin/thread/706c653a-16b0-4696-85ee-9ae3552a582e indique que le recyclage des pools d'applications devenu fou est un autre problème possible.

Larry Smithmier
la source
1

Utilisez le compteur "Process" de Perfmon pour afficher les attributs individuels du processus w3wp.exe. Quelle est la durée du noyau pour le processus de travail? Une durée d'utilisation du noyau élevée peut indiquer une pagination, mais vous dites que vous n'êtes pas convaincu. D'autres possibilités sont les pilotes duff. Le processus de travail a 23 threads actifs, ce qui est bien, mais que font-ils? Essayez ProcessExplorer de SysInternals pour creuser un peu plus; vous pouvez également voir quelles connexions TCP / IP sont en jeu. Je n'ai pas utilisé SQL Express, mais existe-t-il des paramètres de réglage de la mémoire, comme son grand frère. Le SQL prive-t-il IIS de mémoire, provoquant-il une pagination excessive?

Simon Catlin
la source
Voyons si je le fais bien ... J'ai ajouté les compteurs% temps processeur et% temps utilisateur, tous deux pour le processus w3wp, et ils se correspondent parfaitement tout le temps. Cela signifie-t-il qu'il n'y a pas de temps de base ou est-ce que je regarde la mauvaise façon? (désolé, je suis un débutant à cela)
Daniel Magliola
0

Cela peut ne pas être totalement lié, mais vérifiez si vous utilisez NOLOCK dans vos requêtes. Cela pourrait aider dans le cas des délais d'attente SQL.

Rodrigo Hahn
la source