43 votes

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

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

La description courte est la suivante : Nous avons un site très petit (http://hearablog.com) avec très peu de trafic, sur un serveur dédié médiocre, le CPU est toujours très élevé, parfois il reste à 100% pendant des minutes, et w3wp.exe en consomme la majeure partie. Un scénario typique est que w3wp.exe prend 60 %, et SQL Server en prend environ 30 %. Notre base de données est également assez petite.

Description longue et plus de détails :

  • Le site est hébergé sur un serveur très médiocre par Cari.Net. Dès le début, nous avions le sentiment que le serveur ne se comportait pas correctement, que certaines choses prenaient trop de temps, donc cela pourrait être un problème de configuration dès le départ. Il peut également être possible que nous ayons un serveur virtuel alors que nous devrions avoir un dédié, bien que nous n'ayons aucune preuve indiquant cela, excepté le fait que le serveur a tendance à être assez lent.

  • Le serveur est sous 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.

  • Ce matériel est assez médiocre, mais j'ai eu d'autres serveurs avec ces mêmes personnes, avec des configurations équivalentes (ou pires), et les performances sont bien meilleures que celui-ci. Cependant, ces autres serveurs tournent sous W2003 et SQL2005, et j'utilise ASP.Net "WebForms" 2.0, pas de MVC, pas de LINQ, pas de EF ; donc je ne suis pas certain si passer à 2008 / aux autres composants impliquerait une grosse perte de performance.

  • Je sers régulièrement des fichiers MP3 (de 5 à 20 Mo), ce qui est une charge légèrement inhabituelle, peut-être que cela cause des problèmes ?
    Est-ce que cela pourrait causer une forte utilisation du CPU par w3wp ?

  • L'utilisation du disque semble très faible. La mémoire est généralement autour de 90 %, mais l'utilisation du disque semble indiquer qu'il n'y a pas beaucoup de pagination.

  • Je reçois plein d'e-mails chaque jour sur des délais d'attente SQL, pour des requêtes dépassant 30 secondes, bien que toutes nos requêtes soient assez simples (ou devraient l'être, mais EF pourrait causer des problèmes).

Voici à quoi ressemble le moniteur de ressources lors d'une de ces périodes à 100 % de CPU, au cas où il y aurait quelque chose d'utile là-dedans.

texte alternatif

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

Maintenant, ce qui me perturbe beaucoup, c'est que l'utilisation du CPU par w3wp est si élevée. Il ne devrait pas vraiment faire grand-chose... Donc mes questions sont...

  • Y a-t-il un moyen de savoir "quoi" il fait ? Peut-être même le profiler ?
  • Des compteurs de performances spécifiques auxquels je devrais prêter attention ?
  • Est-ce que c'est attendu compte tenu de cette configuration matérielle/logicielle ?
  • Est-ce que cela pourrait être dû à une défaillance de configuration, où commenceriez-vous à chercher ?

Merci BEAUCOUP.
Daniel Magliola

42voto

Roberto Liffredo Points 15265

Vous pouvez également utiliser l'interface des processus de travail (Worker Processes) à l'intérieur du Gestionnaire IIS et inspecter les requêtes qui s'exécutent actuellement et voir où elles sont bloquées éventuellement. Ouvrez le Gestionnaire IIS->Cliquez sur le Serveur dans l'arborescence->Double-cliquez sur l'icône des processus de travail (Worker Processes)->Double-cliquez sur le processus de travail (Worker Process) qui consomme le CPU pour voir les requêtes en cours d'exécution en temps réel afin de voir quel module prend du temps.

Considérez également l'utilisation de la traçabilité des requêtes échouées (Failed Request Tracing) pour suivre une partie du temps par requête et voir où elles prennent beaucoup de temps.

5voto

TomTom Points 50635

D'accord, pour commencer - le serveur est VRAIMENT médiocre. Mais cela DEVRAIT suffire.

  • Pour la virtualisation, vérifiez vos pilotes. Je ne connais aucune plate-forme de virtualisation qui masque le CPU (et je doute que quelqu'un installe un hyper-v ou un esx sur un celeron) mais les pilotes de disque, etc. sont un indicateur.

  • Le CPU ne devrait pas être si élevé. Malheureusement, avec cette RAM, vous êtes pratiquement foutu - si vous commencez à ajouter un profileur, vous allez pratiquement consommer toute la mémoire dont vous disposez.

Je ferais :

  • Vérifiez les journaux pour savoir ce qui s'exécute en ce moment.
  • Mettez à niveau le système d'exploitation vers 2008 R2 - beaucoup plus d'informations sont disponibles là-bas.

Pour les tests :

  • Dans votre environnement de développement, faites une copie du site et effectuez quelques tests de performance.
  • Faites du profiling là-bas.
  • Utilisez le suivi des demandes échouées pour savoir quelles requêtes échouent.

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

a quelques pistes à suivre. Cela pourrait vous donner une indication en cas de problèmes plus - euh - "catégorisables".

Je conserverais également des journaux de performances à long terme. Surveillez votre IO (secondes / lecture, secondes / écriture sont pratiquement les seuls pertinents). Tout le reste est trop vague en termes d'IO - mais une fois que votre IO met plus de temps que nécessaire, les disques prennent du retard.

Je ne soupçonnerais pas un problème de configuration à ce stade - du moins pas comme indicateur principal. Quelque chose utilise vos ressources W3p, maintenant vous devez savoir ce que c'est.

En général, ce n'est pas un serveur que j'aimerais avoir physiquement - il est tellement petit, cela n'a pas de sens à mon humble avis d'avoir une machine là-bas. La virtualisation serait meilleure ;)

4voto

dbr Points 66401

Vous pourriez essayer d'utiliser un programme appelé Process Explorer pour surveiller les threads individuels s'exécutant sous le processus w3wp. Cela devrait vous permettre de voir quel thread est à l'origine de tous les dommages.

3voto

jocull Points 211

J'ai eu beaucoup de chance en utilisant l'outil de diagnostic des bugs de Microsoft pour vider mon processus w3wp puis vérifier les fils et les traces de la pile pour les choses qui étaient bloquées. Il vous dira même la page demandée qui a généré le fil, ce qui est VRAIMENT agréable .

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

1voto

Kirk Strauser Points 12087

Je suis d'accord avec TomTom sur toute la ligne, surtout en ce qui concerne l'obtention d'une meilleure autonomie d'une machine virtuelle à ce stade. Déboguer/profiler localement pour cerner le problème est la bonne chose à faire.

Je vais mettre mon chapeau et ma cape de Karnak le Magnifique et demander la première enveloppe. Rébellion de Ram. Qu'obtient-on quand on met le système d'exploitation, ASP.NET et un SQL Server Express avide dans 1 Go de RAM.

Je crois que votre problème est que SQL Server Express utilise toute la RAM disponible pour un Pool de Buffers et tarde à la libérer. Consultez http://support.microsoft.com/kb/321363 pour plus d'informations. De plus, IIS a un cache par défaut de 256 Mo que vous pourriez avoir besoin de 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 (bon, probablement un marteau-piqueur).

http://technet.microsoft.com/en-us/library/bb742546.aspx est un article assez décent à consulter. http://social.technet.microsoft.com/forums/en-US/sharepointadmin/thread/706c653a-16b0-4696-85ee-9ae3552a582e signale le recyclage fou de l'app pool comme un autre problème possible.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X