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

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

Description courte : Nous avons un très petit site (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 environ 30 %.
Notre base de données est assez petite aussi.

Description longue et plus de détails :

Le site est hébergé sur un serveur très médiocre chez Cari.Net. Dès le début, nous avions l’impression que le serveur ne se comportait pas tout à fait correctement, comme si certaines choses prenaient trop de temps, donc cela pourrait être un problème de configuration dès le départ. Il se pourrait aussi que nous obtenions un serveur virtuel alors que nous sommes censés avoir un dédié, bien que nous n’ayons aucune preuve l’indiquant, mis à part 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.

C’est un matériel assez médiocre, mais j’ai eu d’autres serveurs chez ces hébergeurs, avec un matériel équivalent (ou pire), et les performances sont bien meilleures que celui-ci. Cela dit, les autres serveurs sont sous W2003 et SQL2005, et j’utilise ASP.Net « WebForms » 2.0, pas de MVC, pas de LINQ, pas d’EF ; donc je ne suis pas sûr que le passage à 2008 / aux autres technologies implique une pénalité de performance significative attendue.

Je sers régulièrement des fichiers MP3 (5-20 Mo), ce qui est une charge légèrement inhabituelle, peut-être que cela cause un type de problème ?

Cela pourrait-il faire que w3wp utilise beaucoup de CPU ?

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 ne pagine pas beaucoup.

Je reçois des tonnes de courriels chaque jour concernant des dépassements de délai SQL, pour des requêtes prenant plus de 30 secondes, bien que toutes nos requêtes soient assez simples (ou devraient l’être, mais EF pourrait les compliquer).

Voici à quoi ressemble le moniteur de ressources lors de l’un de ces « sprints » à 100 % de CPU, au cas où il y aurait quelque chose d’utile.

Et un instantané de quelques compteurs de performance :

Ce qui me confond beaucoup, c’est que l’utilisation CPU de w3wp est si élevée.
Il ne devrait pas faire grand-chose en réalité…
Donc mes questions sont…

  • Y a-t-il un moyen de trouver « ce » qu’il fait ? Peut-être même le profiler ?

  • Y a-t-il des compteurs de performance que je devrais examiner ?

  • Est-ce à prévoir étant donné cette configuration matérielle/logicielle ?

  • Si cela pouvait être causé par un défaut de configuration, par où commenceriez-vous à chercher ?

Merci BEAUCOUP.

Daniel Magliola


Source : [Server Fault](http://hearablog.com](http://hearablog.com)

Vous pouvez également utiliser l’interface des processus de travail (Worker Processes) dans le Gestionnaire IIS et inspecter les requêtes en cours d’exécution pour voir si certaines sont bloquées.
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 qui consomme du CPU pour voir les requêtes en cours d’exécution en temps réel afin de voir quel module prend du temps.

Envisagez également d’utiliser le suivi des requêtes ayant échoué (Failed Request Tracing) pour suivre le temps par requête et voir où elles prennent beaucoup de temps.