Wie können Sie wissen, was w3wp.exe tut? (oder wie man ein Leistungsproblem diagnostiziert)

42

Ich habe ein Leistungsproblem auf einer Website, die wir erstellt haben, und weiß nicht genau, wie ich mit der Diagnose beginnen soll.

Die kurze Beschreibung lautet: Wir haben eine sehr kleine Website ( http://hearablog.com ) mit sehr wenig Datenverkehr, in einem beschissenen dedizierten Server, die CPU ist immer sehr hoch, manchmal bleibt sie für Minuten bei 100% und w3wp.exe nimmt das meiste davon. Ein typisches Szenario ist, dass w3wp.exe 60% und SQL Server etwa 30% benötigt. Unsere DB ist auch ziemlich klein.

Lange Beschreibung und weitere Details:

  • Die Seite wird auf einem sehr beschissenen Server von Cari.Net gehostet. Von Anfang an hatten wir das Gefühl, dass sich der Server nicht richtig verhält, da einige Dinge einfach zu lange dauern und dies von Anfang an ein Konfigurationsproblem sein könnte. Es kann auch sein, dass wir einen virtuellen Server bekommen, während wir einen dedizierten Server haben sollen, obwohl wir keine Beweise haben, die dies anzeigen, außer der Tatsache, dass der Server dazu neigt, ziemlich langsam zu sein.

  • Der Server ist Windows 2008 Standard 64-Bit mit SQL 2008 Express

  • Hardware ist ein Celeron 2,80 GHz, 1 GB RAM

  • Die Website wurde in ASP.Net MVC unter Verwendung von Entity Framework für den Datenzugriff entwickelt.

  • Nun, das ist ziemlich beschissene Hardware, aber ich hatte andere Server mit diesen Leuten, mit gleichwertiger (oder schlechterer) Hardware, und die Leistung ist viel besser als diese. Das heißt, die anderen Server haben W2003 und SQL2005, und ich verwende ASP.Net "WebForms" 2.0, kein MVC, kein LINQ, kein EF; Ich bin mir also nicht sicher, ob 2008 / das andere Zeug eine große Leistungsstrafe bedeutet.

  • Ich stelle regelmäßig MP3-Dateien (5 bis 20 MB) zur Verfügung. Dies ist eine etwas ungewöhnliche Last, die möglicherweise Probleme verursacht.
    Würde dies dazu führen, dass w3wp viel CPU verbraucht?

  • Die Festplattennutzung scheint sehr gering zu sein. Der Arbeitsspeicher liegt normalerweise bei etwa 90%, aber die Festplattenauslastung scheint darauf hinzudeuten, dass nicht viel ausgelagert wird.

  • Ich erhalte jeden Tag Unmengen von E-Mails über SQL-Zeitüberschreitungen für Abfragen, die länger als 30 Sekunden dauern, obwohl alle unsere Abfragen ziemlich unkompliziert sind (oder sein sollten, aber EF kann es vermasseln).

So sieht der Ressourcenmonitor in einem dieser "Sprints" mit 100% CPU aus, für den Fall, dass dort etwas Nützliches vorhanden ist.

Alt-Text

Und eine Momentaufnahme einiger Leistungsindikatoren: Alt-Text

Was mich sehr verwirrt ist, dass die CPU-Auslastung von W3WP so hoch ist. Es sollte eigentlich nicht viel bewirken ... Also meine Fragen sind ...

  • Gibt es eine Möglichkeit, herauszufinden, "was" es tut? Vielleicht sogar profilieren?
  • Gibt es Leistungsindikatoren, auf die ich achten sollte?
  • Ist dies bei dieser Hardware- / Software-Konfiguration zu erwarten?
  • Kann dies an einem Konfigurationsfehler liegen? Wo würden Sie anfangen zu suchen?

Vielen Dank.
Daniel Magliola

Daniel Magliola
quelle

Antworten:

42

Sie können auch die Benutzeroberfläche für Arbeitsprozesse im IIS-Manager verwenden und die derzeit ausgeführten Anforderungen überprüfen, um festzustellen, wo sie hängen bleiben. Öffnen Sie den IIS-Manager -> Klicken Sie in der Struktur auf den Server -> Doppelklicken Sie auf das Symbol Worker-Prozesse -> Doppelklicken Sie auf den Worker-Prozess, der die CPU beansprucht, um die aktuell ausgeführten Anforderungen in Echtzeit anzuzeigen, damit Sie sehen können, welches Modul Zeit benötigt.

Ziehen Sie auch in Betracht, die Ablaufverfolgung für fehlgeschlagene Anforderungen zu verwenden, um einen Teil der Zeit pro Anforderung zu verfolgen, um festzustellen, wo sie lange dauern.

Carlos Aguilar Mares
quelle
2
Das ist vielversprechend, es klingt genau so, wie ich es sehen möchte, aber tatsächlich sind diese Bildschirme leer. Es werden anscheinend nur Anfragen angezeigt, die länger als eine Sekunde dauern, laut dem großen Zeichen oben, und keine unserer Anfragen ist offensichtlich, da die Liste leer ist. Irgendwelche Ideen, wie man es mehr Anfragen zeigen lässt? Wie senkt man den 1s Filter? Vielen Dank!
Daniel Magliola
1
Sie können 0 in den Filter eingeben und auf Los klicken. Dadurch wird der Wert auf 0 Sekunden gesetzt. Sie könnten auch an einer Eingabeaufforderung mit erhöhten Rechten "% windir% \ system32 \ inetsrv \ appcmd.exe-Listenanforderungen" ausgeführt werden
Carlos Aguilar Mares,
1
Vielen Dank, Carlos! Dies ist, was ich getan habe, um die eine Anfrage (ein Cron, den wir haben) zu finden, die meinen Server alle 5 Minuten beendet hat (es dauerte 3,5 Minuten, also war es fast konstant bei 100% CPU). Vielen Dank!!!
Daniel Magliola
1
Diese Benutzeroberfläche hat mir mitgeteilt, auf welche URL zugegriffen wurde. Leider handelt es sich um einen POST für einen ASMX-Webservice, und diese Daten sind nicht verfügbar. (Headbang)
Ross Presser
5

Ok, um zu starten - der Server ist wirklich beschissen. Aber es sollte genug sein.

  • Überprüfen Sie für die Virtualisierung Ihre Treiber. Ich kenne keine Virutalisierungsplattform, die die CPU verbirgt (und ich glaube, jemand stellt ein Hyper-V oder einen Esx auf einen Celeron), aber die Treiber für Discs usw. sind ein Hinweis.

  • CPU sollte nicht so hoch sein. Leider sind Sie mit diesem RAM so gut wie ein Trinkspruch - wenn Sie einen Profiler hinzufügen, wird der Speicher, den Sie haben, so gut wie aufgebraucht.

Ich würde:

  • Überprüfen Sie die Protokolle auf aktuell ausgeführte Inhalte.
  • Aktualisieren Sie das Betriebssystem auf 2008 R2 - viele weitere Informationen sind dort verfügbar.

Zum Prüfen:

  • Erstellen Sie in Ihrer Entwicklungsumgebung eine Kopie der Site und führen Sie einige Leistungstests durch.
  • Machen Sie dort ein Profil.
  • Verwenden Sie Failed REquest Tracking, um herauszufinden, welche Anforderungen fehlschlagen.

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

hat da einiges angefangen. Dies kann Ihnen einen Hinweis geben, falls die Probleme mehr - hm - "kategorisierbar" sind.

Ich würde auch längerfristige Leistungsprotokolle führen. Achten Sie auf Ihre E / A (Sekunden / Lesen, Sekunden / Schreiben sind so ziemlich die einzigen relevanten). Der Rest ist zu vage, aber sobald Ihr IO länger dauert als es sollte, fallen die Disks zurück.

Ich würde ein Konfigurationsproblem an dieser Stelle ausschließen - zumindest als Hauptindikator. Etwas verbraucht Ihre W3p-Ressourcen, jetzt müssen Sie herausfinden, was es ist.

Im Allgemeinen ist dies kein Server, den ich gerne physisch hätte - er ist so klein, dass es meiner Meinung nach keinen Sinn macht, einen Computer dort zu haben. Virtuell wäre besser;)

TomTom
quelle
ich danke Ihnen sehr für Ihre Antwort. Einige Fragen: Welche Protokolle würden Sie auf aktuell ausgeführte Inhalte überprüfen? (Entschuldigung, wenn dies eine Frage für Neulinge ist) - Upgrade des Betriebssystems: Das könnten wir versuchen, aber ich befürchte, es könnte Dinge kaputt machen, vielleicht, wie sicher ist das? - Entwicklungsumgebung: Das Problem ist, dass es in meiner Entwicklungsumgebung gut funktioniert. CPU ist vernachlässigbar, Anfragen nicht fehlschlagen, etc.
Daniel Magliola
Zu den E / A-Protokollen: Ich habe gerade die von Ihnen erwähnten Zähler hinzugefügt, und sie sind alle auf 0, während die CPU hoch ist. Ich habe gerade einen Screenshot einiger Leistungsindikatoren hinzugefügt, die ich gerade ansehe. Ich weiß, dass ein Schnappschuss nicht die ganze Geschichte erzählt, aber diese Werte sind in der Regel ziemlich stabil. Glauben Sie, dass die Anzahl der aktuellen Verbindungen (für die ich keine Erklärung habe) ein Problem sein könnte? Irgendwelche Ideen, wie man herausfindet, was diese Verbindungen verlangen / tun? Sind andere Zähler Ihrer Meinung nach nützlich für die Diagnose von so etwas?
Daniel Magliola
Nun, R2 ist ziemlich sicher. Ich habe alles aufgerüstet und nie ein Problem bekommen. Wie auch immer ... das ist ein CPU-Problem und es kann schrecklich sein, besonders wenn man bedenkt, dass man nicht genug RAM hat, um einen Profiler zu installieren. Ich würde tatsächlich eine vollständige Neuinstallation versuchen. Ja, ist zum Kotzen, aber es bedeutet, dass Sie R2 neu installieren und prüfen können, ob das Problem weiterhin besteht. Das Schlimme ist, dass Sie kein Reservesystem haben, sodass Sie nicht erkennen können, ob das Problem "lokal" oder allgemeiner ist. Alternativ: IIS stoppen, alle verwendeten temporären Ordner löschen, auch
TomTom
für die Kompilierung und sehen, was passiert, wenn Sie neu starten. Mit R2 konnten Sie sehen, ob und welche Dateien von IIS geöffnet bleiben. Gehört das zu einer Webanwendung oder ist es auch dort, wenn alle Websites gestoppt sind? Als nächstes sollten Sie versuchen, alle Websites auszuschalten und herauszufinden, welche Websites Probleme verursachen.
TomTom
Schließlich besteht das Problem bei virtuellen Servern darin, dass wir, soweit ich weiß, für die gleiche Hardware mehr oder das Gleiche zahlen müssen. Außerdem ist die Bandbreitenrechnung umwerfend (denken Sie daran, dass wir Audiodateien bereitstellen). Wir werden auf einen größeren Server umziehen, wenn wir müssen, aber ehrlich gesagt, mit dem Verkehr, den wir haben, muss es ein Problem geben, wir sollten niemals 100% CPU verwenden.
Daniel Magliola
4

Sie können versuchen, ein Programm namens Process Explorer zu verwenden, um einzelne Threads zu überwachen, die unter dem Prozess w3wp ausgeführt werden. Sie sollten sehen können, welcher Thread den gesamten Schaden verursacht.

Joe Phillips
quelle
3

Ich hatte wirklich großes Glück, das Debug Diagnostic Tool von Microsoft zu verwenden, um meinen w3wp-Prozess zu sichern und dann die Threads und Stack-Traces auf Probleme zu überprüfen, die sich aufhielten. Es wird dir sogar die angeforderte Seite sagen, die den Thread hervorgebracht hat, der SUPER nett ist .

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

scherzen
quelle
1

Ich bin mit TomTom einverstanden, insbesondere was die Verbesserung der Laufleistung eines virtuellen Geräts anbelangt. Das Debuggen / Profilieren vor Ort, um das Problem einzugrenzen, ist das Richtige.

Ich werde meinen Hut und Umhang von Karnak The Magnificent aufsetzen und nach dem ersten Umschlag fragen. Widderaufstand. Was bekommen Sie, wenn Sie das Betriebssystem, ASP.NET und einen gierigen SQL Server Express auf 1 GB setzen.

Ich glaube, dass Ihr Problem darin besteht, dass SQL Server Express den gesamten verfügbaren Arbeitsspeicher für einen Pufferpool abruft und ihn nur langsam freigibt. Weitere Informationen finden Sie unter http://support.microsoft.com/kb/321363 . Außerdem verfügt IIS über einen Standardcache von 256 MB, den Sie möglicherweise optimieren müssen ( https://stackoverflow.com/questions/2853135/controlling-asp-net-output-cache-memory-usage ). Debug Diagnostics ist ein großartiges Tool zur Fehlerbehebung (ok, wahrscheinlich ein Vorschlaghammer).

http://technet.microsoft.com/en-us/library/bb742546.aspx ist ein recht anständiger Artikel. http://social.technet.microsoft.com/forums/en-US/sharepointadmin/thread/706c653a-16b0-4696-85ee-9ae3552a582e weist darauf hin, dass das Recycling von App-Pools ein weiteres mögliches Problem darstellt.

Larry Smithmier
quelle
1

Verwenden Sie den Leistungsindikator "Process" von Perfmon, um die einzelnen Attribute des Prozesses "w3wp.exe" anzuzeigen. Wie viel der CPU-Zeit für den Arbeitsprozess ist Kernelzeit? Hohe Kernel-Zeiten könnten auf Paging hindeuten, aber Sie sagen, dass Sie nicht überzeugt sind. Andere Möglichkeiten sind duff Fahrer. Der Arbeitsprozess hat 23 aktive Threads, was gut ist, aber was machen sie? Probieren Sie den ProcessExplorer von SysInternals aus, um ein bisschen mehr zu erfahren. Sie können auch sehen, welche TCP / IP-Verbindungen im Spiel sind. Ich habe SQL Express nicht verwendet, aber es hat Speicheroptimierungsparameter, wie sein großer Bruder. Verhungert SQL den IIS-Speicher, was zu übermäßigem Paging führt?

Simon Catlin
quelle
Mal sehen, ob ich das richtig mache ... Ich habe die Indikatoren% Prozessorzeit und% Benutzerzeit hinzugefügt, beide für den w3wp-Prozess, und beide stimmen die ganze Zeit perfekt überein. Bedeutet das, dass es keine Kernel-Zeit gibt, oder sehe ich das falsch? (Entschuldigung, ich bin ein Neuling in diesem Bereich)
Daniel Magliola
0

Möglicherweise besteht kein vollständiger Zusammenhang, prüfen Sie jedoch, ob Sie NOLOCK in Ihren Abfragen verwenden. Dies kann bei SQL-Zeitüberschreitungen hilfreich sein.

Rodrigo Hahn
quelle