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.
Et un instantané de quelques compteurs de performance:
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
la source
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:
Pour tester:
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;)
la source
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.
la source
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
la source
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.
la source
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?
la source
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.
la source