J'ai un problème de performances dans un site que nous avons créé et je ne sais pas exactement 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é merdique, le CPU est toujours très élevé, parfois il reste à 100% pendant quelques minutes, et w3wp.exe en prend la plupart. Un scénario typique est w3wp.exe prend 60% et SQL Server 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 merdique par Cari.Net. Dès le début, nous avions le sentiment que le serveur ne se comportait pas tout à fait correctement, comme certaines choses prendraient trop de temps, donc cela pourrait être un problème de configuration dès le départ. Il peut également que nous obtenions un serveur virtuel alors que nous sommes censés en avoir un dédié, bien que nous n'ayons aucune preuve qui l'indiquerait , 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é dans ASP.Net MVC, en utilisant Entity Framework pour l'accès aux données.
Maintenant, c'est un matériel assez merdique, mais j'ai eu d'autres serveurs avec ces gars, avec un matériel équivalent (ou pire), et les performances sont bien meilleures que celui-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 d'EF; donc je ne sais pas si aller à 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 légèrement inhabituelle, peut-être que cela cause des problèmes?
Est-ce que w3wp utiliserait beaucoup de CPU?
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 n'est pas importante.
Je reçois tonnes d'e-mails chaque jour sur les délais d'attente SQL, pour les requêtes prenant plus de 30 secondes, bien que toutes nos requêtes soient assez simples (ou devraient l'être, mais EF peut être en train de le visser).
Voici à quoi ressemble le moniteur de ressources dans l'un de ces "sprints" 100% CPU, au cas où il y aurait quelque chose d'utile.
Et un instantané de certains compteurs de performances:
Maintenant, ce qui m'embrouille beaucoup, c'est que l'utilisation du processeur de w3wp est tellement élevée. Ça ne devrait pas faire grand-chose vraiment ... Alors mes questions sont ...
Merci beaucoup.
Daniel Magliola
Vous pouvez également utiliser l'interface utilisateur des processus de travail dans IIS Manager et inspecter les requêtes en cours d'exécution et voir où elles se bloquent le cas échéant. Ouvrir IIS Manager -> 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 le processeur pour voir les demandes en cours d'exécution en temps réel afin que vous puissiez 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 du temps.
Ok, pour commencer - le serveur est vraiment merdique. Mais cela DEVRAIT être suffisant.
Pour la virtualisation, vérifiez vos pilotes. Je ne connais aucune plate-forme de virutalisation qui cache le CPU (et je suppose que quelqu'un met un hyper-v ou esx sur un celeron) mais les pilotes pour le disque etc. sont une indication.
Le CPU ne doit pas être aussi élevé. Malheureusement, avec cette RAM, vous êtes à peu près toast - si vous commencez à ajouter un profileur, vous soufflerez à peu près la mémoire que vous avez.
Je voudrais:
Pour tester:
http://learn.iis.net/page.aspx/266/troubleshooting-failed-requests-using-tracing-in-iis-7/
a un début là-bas. Cela peut vous donner un indice au cas où les problèmes seraient plus - hm - "catégorisables".
Je conserverais également des journaux de performances à plus long terme. Attention à votre IO (secondes/lecture, secondes/écriture sont à peu près les seules pertinentes). Tout le reste est IO sage trop vague - mais une fois que votre IO commence à prendre plus de temps que prévu, les disques prennent du retard.
J'exclurais un problème de configuration à ce stade - au moins comme indicateur principal. Quelque chose utilise vos ressources W3p, vous devez maintenant découvrir de quoi il s'agit.
En général, ce n'est pas un serveur que j'aimerais avoir physique - il est si petit, cela n'a aucun sens à mon humble avis d'y avoir une machine. Le virtuel serait mieux;)
Vous pouvez essayer d'utiliser un programme appelé Process Explorer pour surveiller les threads individuels exécutés sous le processus w3wp. Il devrait vous permettre de voir quel fil est à l'origine de tous les dégâts.
J'ai eu beaucoup de chance en utilisant l'outil de diagnostic de débogage de Microsoft pour vider mon processus w3wp, puis vérifier les threads et les traces de pile pour les choses qui se bloquaient. Il vous indiquera même la page demandée qui a engendré le fil qui est SUPER Nice.
http://www.Microsoft.com/en-us/download/details.aspx?id=26798
Je suis d'accord avec TomTom sur toute la ligne, en particulier pour obtenir un meilleur kilométrage d'un virtuel à ce stade. Déboguer/profiler localement pour réduire 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 Rebellion. Qu'obtenez-vous lorsque vous mettez le système d'exploitation, ASP.NET et un SQL Server Express gourmand en 1 Go.
Je crois que votre problème est que SQL Server Express tire tous les RAM pour un pool de tampons et tarde à le libérer. Voir http://support.Microsoft.com/kb/32136 pour plus d'informations. En outre, IIS possède un cache par défaut de 256 Mo que vous devrez peut-être modifier ( https://stackoverflow.com/questions/ 2853135/control-asp-net-output-cache-memory-use ). Debug Diagnostics est un excellent outil pour résoudre ce problème (ok, probablement un marteau).
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 du pool d'applications est devenu un autre problème possible.
Utilisez le compteur "Processus" de Perfmon pour voir les attributs individuels du processus w3wp.exe. Combien de temps CPU pour le processus de travail est le temps du noyau? Des temps de noyau élevés pourraient 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 a-t-il des paramètres de réglage de la mémoire, comme son grand frère. SQL affame-t-il IIS de mémoire, provoquant une pagination excessive?
Il n'est peut-être pas totalement lié, mais vérifiez si vous utilisez NOLOCK dans vos requêtes. Cela pourrait aider dans le cas des délais d'expiration SQL.