Wie kann ich die 99% -CPU-Auslastung von w3wp.exe untersuchen?

22112
HopelessN00b

w3wp.exezeigt 99% CPU-Auslastung. Wie lassen sich die Ursachen für diese hohe CPU-Auslastung am besten untersuchen?

7

5 Antworten auf die Frage

6
Brian Rasmussen

Füge WinDbg + sos hinzu und führe es aus !runaway. Das zeigt Ihnen, welcher Thread die meiste CPU-Zeit beansprucht. Machen Sie einen !clrstackThread im Thread, um herauszufinden, was er tut.

Können Sie einige Anweisungen zum Anhängen eines Prozesses verknüpfen oder ausfüllen? Ich benutze Windows seit 3.11, programmiere seit einem Jahrzehnt und habe keine Ahnung, wie das geht. Rob Allen vor 14 Jahren 4
Sowohl WinDbg als auch Visual Studio (und viele andere Debugger) können an einen Prozess angeschlossen werden, um ihn zu debuggen. Der Grund, warum ich WinDbg erwähne, ist, dass die Erweiterung SOS es relativ einfach macht, CPU-Umarmungen zu finden. Weitere Informationen zu WinDbg finden Sie unter http://www.microsoft.com/whdc/devtools/debugging/default.mspx Brian Rasmussen vor 14 Jahren 3
Wenn das Problem auf dem LIVE-Server liegt, aber ich keinen Zugriff darauf habe, haben Sie Vorschläge. vor 14 Jahren 0
Ohne Zugang ist es viel schwieriger, das herauszufinden. Gehen Sie dann den Quellcode durch. Suchen Sie nach potenziellen Live-Sperren, enormem Speicherverbrauch (das Problem könnte sein, dass zu viel Zeit für die GC-Arbeit aufgewendet wird) und so weiter. Ohne zusätzliche Angaben ist es schwierig, konkrete Ratschläge zu geben. Brian Rasmussen vor 14 Jahren 0
3
lsalamon

Andere Vorschläge für Tools sind DebugDiag. Weitere Informationen finden Sie hier.
[UPDATE] Verwenden Sie ProcDump . Weitere Informationen finden Sie unter Verwenden von ProcDump.exe zum Überwachen von "w3wp.exe" auf CPU-Spitzen .

Besonders schön, wenn keine Entwickler die Crashdumps etc. bereitstellen müssen. vor 14 Jahren 0
2
splattne

w3wp.exeIst der ASP.NET-Arbeitsprozess. Wenn also ein hoher Prozentsatz der Server-CPU verwendet wird, ist es die ASP.NET-Anwendung, die das Problem verursacht. Dies bedeutet jedoch nicht unbedingt, dass ein Problem mit der ASP.NET-Anwendung vorliegt. Möglicherweise werden zu viele Anforderungen mit begrenzten Ressourcen bearbeitet. Die einzige wirkliche Maßnahme besteht darin, die CPU-Auslastung anhand des Verkehrsaufkommens zu überprüfen, das von der Anwendung verarbeitet wird.

Wenn Sie den Verdacht haben, dass eine bestimmte Anforderung zu lange dauert, können Sie das Logparser- Befehlszeilenprogramm verwenden, um Ihre Protokolldateien zu analysieren und herauszufinden, welche Seite eine lange Ausführungszeit hat.

c:\>logparser "select top 10 cs-uri-stem, time-taken from INSERT_YOUR_IIS_LOG_FILE_NAME.log group by cs-uri-stem order by time-taken desc" -q:on 

Sie können auch ein Tool verwenden, um anzuzeigen, welche Seiten gerade ausgeführt werden, wie beispielsweise IISPeek (nicht frei).

Wenn Sie tiefer gehen möchten, versuchen Sie zu verstehen, wie WinDbg verwendet wird. Hier ist ein gutes Tutorial: Windows Debuggers: Teil 1: Ein WinDbg-Tutorial

Sie müssen auch "time-taken" in der group-by-Klausel haben, sonst gibt das Skript einen Fehler aus. kafka vor 8 Jahren 0
0
Greg

Ich hatte dieses Problem schon vorübergehend. Es scheint nach der ersten Anfrage auf 99% anzusteigen und kommt nie herunter. Wenn ich den Prozess abschalte, verhält sich der neue Arbeitsprozess normalerweise korrekt. Ich habe nie herausgefunden, warum das so ist.

0

Wir haben dieselbe Ausgabe, die Greg oben notiert. Wir töten nur diese Prozesse. Nicht auf IIS6 / Windows Server 2003, nur auf IIS7 / Windows Server 2008, beobachtet.