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.
Und eine Momentaufnahme einiger Leistungsindikatoren:
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
quelle
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:
Zum Prüfen:
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;)
quelle
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.
quelle
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
quelle
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.
quelle
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?
quelle
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.
quelle