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

1voto

humanzz Points 307

Utilisez le compteur "Processus" de Perfmon pour voir les attributs individuels du processus w3wp.exe. Combien de temps CPU du processus du travailleur est du temps noyau ? Des temps noyau élevés pourraient être indicatifs de pagination, mais vous dites que vous n'êtes pas convaincu. D'autres possibilités sont des pilotes défectueux. Le processus du travailleur a 23 threads actifs, ce qui est bon, mais que font-ils ? Essayez ProcessExplorer de SysInternals pour creuser un peu plus ; vous pouvez également voir quelles connexions TCP/IP sont en cours. Je n'ai pas utilisé SQL Express, mais a-t-il des paramètres d'optimisation de la mémoire, comme son grand frère. SQL prive-t-il IIS de mémoire, entraînant une pagination excessive ?

-1voto

Antp Points 298

Ça n'est peut-être pas totalement lié, mais vérifiez si vous utilisez NOLOCK dans vos requêtes. Cela pourrait aider en cas de délais SQL.

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