Freigeben über


Problembehandlung bei hoher CPU in einem IIS-Anwendungspool

Gilt für: Internetinformationsdienste

Diese Problembehandlung hilft Ihnen, die Ursache für eine anhaltend erhöhte CPU-Auslastung in einem Anwendungspool von Internet Information Services (IIS) zu ermitteln. Die CPU-Auslastung nimmt in der Regel zu, wenn eine Webanwendung Anforderungen erfüllt. Wenn Sie jedoch immer sehen, dass die CPU über einen längeren Zeitraum auf einem hohen Niveau (80 Prozent oder höher) bleibt, leidet die Leistung Ihrer Anwendung. Daher ist es wichtig, die Ursache einer anhaltenden hohen CPU zu verstehen, damit Sie das Problem beheben können.

Szenario

Ein Anwendungspool in IIS erlebt einen längeren Zeitraum mit hoher CPU, der die Nutzung von 80 Prozent überschreitet. Wenn Sie die Anwendung testen, treten keine Probleme auf. Anschließend wird die Anwendung tatsächlicher Benutzerlast ausgesetzt, und die CPU steigt zu einem hohen Prozentsatz und bleibt auf diesem Niveau. Zum Wiederherstellen müssen Sie den Anwendungspool neu starten. Die CPU steigt jedoch nach dem Neustart erneut auf ein hohes Niveau.

Diagnosetools

Datensammlung

Wenn probleme mit hoher CPU-Auslastung auftreten, ermitteln Sie zuerst den Prozess, der die meiste CPU verbraucht. Verwenden Sie die Registerkarte "Prozesse " im Task-Manager, um diese Informationen zu finden. Stellen Sie sicher, dass Sie das Kontrollkästchen "Prozesse von allen Benutzern anzeigen" aktivieren. Der folgende Screenshot zeigt dieses Feld ausgewählt und zeigt, dass der Prozess (der w3wp.exe Prozess, der einen IIS-Anwendungspool hostet) eine hohe CPU-Auslastung verbraucht.

Windows Task-Manager mit der Spalte

Sie können auch den Leistungsmonitor verwenden, um zu bestimmen, welcher Prozess die meiste CPU verwendet. Weitere Informationen zur Verwendung des Leistungsmonitors finden Sie unter Analysieren von Leistungsdaten.

Tipp

Um zu ermitteln, welcher Anwendungspool einem bestimmten w3wp.exe Prozess zugeordnet ist, öffnen Sie ein Verwaltungs-Eingabeaufforderungsfenster, wechseln Sie in den %windir%\System32\inetsrv Ordner (cd %windir%\System32\inetsrv), und führen Sie dann aus appcmd list wp. Dieser Befehl zeigt den Prozessbezeichner (Process Identifier, PID) des w3wp.exe Prozesses in Anführungszeichen an. Sie können diese PID mit der PID abgleichen, die im Task-Manager verfügbar ist.

Nachdem Sie überprüft haben, ob ein w3wp.exe Prozess eine hohe CPU aufweist, bestimmen Sie die Ursache des Problems, indem Sie die folgenden Informationen sammeln:

Hinweis

Im Allgemeinen wirkt sich die ETW-Ablaufverfolgung nicht auf die Leistung aus. Dieses Feature macht es in Produktionsszenarien nützlich, in denen die Serverleistung während der Protokollsammlung verwaltet werden muss. Im Vergleich dazu pausieren Threads während der Speicherabbildaufnahme. Daher kann die Serverleistung während der Sammlung von Speicherabbilddateien reduziert werden.

Eine ETW-Ablaufverfolgung enthält detaillierte Informationen, die im Laufe der Zeit mit dem CPU-Verbrauch zusammenhängen. Eine ETW-Ablaufverfolgung bietet jedoch nicht die detaillierte Ansicht von Objekten, deren Werten und deren Wurzeln, die eine Speicherabbilddatei bereitstellt. Daher ist eine ETW-Ablaufverfolgung für Szenarien hilfreich, in denen die CPU-Auslastung hoch ist, aber der Arbeitsspeicherverbrauch normal ist.

Ziel dieser Datensammlung ist es, die Vorgänge für nicht wartende Threads zu beobachten, wenn die w3wp.exe CPU-Auslastung am höchsten ist. Wenn Sie Daten sammeln, befolgen Sie die folgenden Empfehlungen:

  • Sammeln Sie mehrere Protokolle oder Speicherabbilder (drei sind in der Regel ausreichend).
  • Sammeln Sie Ablaufverfolgungen oder Speicherabbilddateien aus derselben Prozess-ID.
  • Sammeln Sie Ablaufverfolgungen oder Dumpdateien alle 10 Sekunden, um die Zeit dazwischen zu verringern. (Diese Methode trägt dazu bei, sicherzustellen, dass die gleichen Threads in jeder Ablaufverfolgungs- oder Dumpdatei noch aktiv sind, damit Sie besser ermitteln können, welche Threads die meiste CPU verbrauchen.)
  • Sammeln Sie Dumpdateien, wenn die CPU-Auslastung w3wp.exe hoch oder ungewöhnlich ist, nicht nur, wenn die gesamte Server-CPU-Auslastung hoch ist.

Sammeln eines Datensammlersatzes für den Leistungsmonitor

Leistungsmonitor Daten sind häufig wichtig bei der Ermittlung der Ursache hoher CPU-Probleme. Es kann auch hilfreich sein, einen "Großen Überblick" über die Leistung Ihrer Anwendung zu erhalten.

Sie können Perfmon-Daten in Echtzeit anzeigen oder in einem Datensammlersatz zur späteren Überprüfung sammeln. Eine Datensammlung ist erforderlich, um eine hohe CPU-Auslastung zu analysieren. Führen Sie zum Erstellen des Sets die folgenden Schritte aus:

  1. Öffnen Sie in der Systemsteuerung die Verwaltungstools.
  2. Doppelklicken Sie auf den Leistungsmonitor.
  3. Erweitern Sie den Knoten "Datensammlersätze".
  4. Klicken Sie mit der rechten Maustaste auf "Benutzerdefiniert", und wählen Sie dann "Neuer> aus.
  5. Geben Sie dem Datensammler den Namen "High CPU".
  6. Wählen Sie " Manuell erstellen" (Erweitert) aus.
  7. Wählen Sie Weiter aus.
  8. Wählen Sie " Datenprotokolle erstellen" aus.
  9. Aktivieren Sie das Kontrollkästchen "Leistungsindikator ".
  10. Wählen Sie Weiter aus.
  11. Wählen Sie Hinzufügen. Wenn Ihre Anwendung keine ASP.NET Anwendung ist, fahren Sie mit Schritt 19 fort.
  12. Scrollen Sie zum Anfang der Liste der Zähler, und wählen Sie .NET CLR Memory aus.
  13. Wählen Sie <alle Instanzen> aus der Liste der Instanzen aus.
  14. Um die Zähler zur Liste der hinzugefügten Leistungsindikatoren hinzuzufügen, wählen Sie "Hinzufügen" aus.
  15. Wählen Sie ASP.NET aus der Liste der Leistungsindikatoren aus, und wählen Sie dann "Hinzufügen" aus.
  16. Wählen Sie in der Liste der Zähler ASP.NET-Anwendungen aus.
  17. Wählen Sie <alle Instanzen> aus der Liste der Instanzen aus.
  18. Wählen Sie Hinzufügen.
  19. Erweitern Sie in der Liste der Zähler "Prozess". (Stellen Sie sicher, dass Sie den Prozess erweitern und nicht den Prozessor.)
  20. Wählen Sie im Process-Objekt% Prozessorzeit aus.
  21. Wählen Sie <alle Instanzen> aus der Liste der Instanzen aus.
  22. Wählen Sie Hinzufügen.
  23. Erweitern Sie in der Liste der Zähler Thread.
  24. Wählen Sie im Threadobjekt% Prozessorzeit aus.
  25. Wählen Sie <alle Instanzen> aus der Liste der Instanzen aus.
  26. Wählen Sie Hinzufügen.
  27. Wählen Sie in der Liste der Instanzen den ID-Thread aus.
  28. Wählen Sie Hinzufügen.

Das Dialogfeld sollte nun dem folgenden Screenshot ähneln.

Das Dialogfeld

Wählen Sie OK>Weiter aus. Beachten Sie, wo der Datensammlersatz gespeichert wird. (Sie können diesen Speicherort bei Bedarf ändern.) Wählen Sie dann "Fertig stellen" aus.

Der Datensammlersatz wird noch nicht ausgeführt. Um es zu starten, gehen Sie zum Knoten Benutzerdefiniert, suchen Sie, klicken Sie mit der rechten Maustaste auf "Hoch-Cpu", und wählen Sie dann im Menü "Start" aus.

Sammeln einer Speicherabbilddatei im Benutzermodus mithilfe der Debugdiagnose

Die einfachste Möglichkeit, Prozessabbilddateien im Benutzermodus zu sammeln, wenn eine hohe CPU-Auslastung auftritt, ist die Verwendung von Debug Diagnostics.

Laden Sie DebugDiag herunter, installieren Sie sie, und führen Sie sie auf Ihrem Server aus. Wenn Sie DebugDiag ausführen, zeigt das Tool das Dialogfeld Regeltyp auswählen an. Führen Sie die folgenden Schritte aus, um eine Absturzregel für Ihren Anwendungspool zu erstellen:

  1. Wählen Sieals Nächstes>" aus.
  2. Wählen Sie als Nächstes Leistungsindikatoren aus>.
  3. Wählen Sie "Perf-Trigger hinzufügen" aus.
  4. Erweitern Sie das Prozessorobjekt (nicht das Process-Objekt), und wählen Sie dann % Prozessorzeit aus.
  5. Wählen Sie in der Liste der Instanzen _Total aus.
  6. Wählen Sie"OK> aus.
  7. Wählen Sie den neu hinzugefügten Auslöser und dann " Schwellenwerte bearbeiten" aus. Das Dialogfeld
  8. Wählen Sie in der Dropdownliste "Oben" aus.
  9. Ändern Sie den Schwellenwert auf 80.
  10. Geben Sie "20 " für die Anzahl der Sekunden ein. (Sie können diesen Wert bei Bedarf anpassen. Um jedoch falsche Trigger zu verhindern, achten Sie darauf, keine kleine Anzahl von Sekunden anzugeben.)
  11. Wählen Sie OK aus.
  12. Wählen Sie Weiter aus.
  13. Wählen Sie " Dumpziel hinzufügen" aus.
  14. Wählen Sie in der Dropdownliste " Webanwendungspool" aus.
  15. Wählen Sie in der Liste der Anwendungspools Ihren Anwendungspool aus.
  16. Wählen Sie OK aus.
  17. Wählen Sie " Weiter " zweimal aus.
  18. Geben Sie bei Bedarf einen Namen für Ihre Regel ein, und notieren Sie sich den Speicherort, an dem die Speicherabbilddateien gespeichert werden sollen. Sie können diesen Speicherort später ändern.
  19. Wählen Sie Weiter aus.
  20. Wählen Sie "Regel jetzt aktivieren" und dann " Fertig stellen" aus.

Tipp

Sie können Dumpdateien mehrerer Anwendungspools erstellen, indem Sie mehrere Ziele für Dumpdateien hinzufügen. Verwenden Sie die gleiche Technik, die Sie in den Schritten 13-15 verwendet haben.

Diese Regel erstellt 11 Dumpdateien. Die ersten 10 sind "Minidumps". Die endgültige Speicherabbilddatei hat vollen Arbeitsspeicher und ist viel größer.

Nachdem das CPU-Auslastungsproblem auftritt, beenden Sie das Sammeln von Daten durch das Perfmon-Datensammlerset. Um die Sammlung zu beenden, klicken Sie mit der rechten Maustaste auf den 'High CPU' Datensammler-Satz, der unter dem Knoten Benutzerdefiniert aufgeführt ist, und wählen Sie dann Stop aus.

Sammeln von ETW-Ablaufverfolgungen mithilfe von PerfView

  1. Laden Sie PerfView herunter, und führen Sie sie als Administrator aus.
  2. Wählen Sie "Sammeln">aus.
  3. Aktivieren Sie die Kontrollkästchen Zip, Zusammenführen und Threadzeit.
  4. Erweitern Sie erweiterte Optionen, und aktivieren Sie das IIS-Kontrollkästchen .
  5. Wählen Sie "Startauflistung" aus. PerfView beginnt mit der Erfassung der Daten.
  6. Nachdem PerfView die Ausführung abgeschlossen hat, wählen Sie Sammlung beenden aus.

PerfView führt mehrere ETL-Dateien in einer .zip Datei zusammen und speichert die Datei im selben Ordner wie PerfView.exe. Die komprimierte Datei wird für die Analyse freigegeben.

Datenanalyse

Nach dem hohen CPU-Ereignis haben Sie zwei Daten, die überprüft werden müssen: den Perfmon-Datensammlersatz und die Speicherabbilddateien. Beginnen Sie mit der Überprüfung der Perfmon-Daten.

Analysieren von Leistungsdaten

Um die Perfmon-Daten für Ihr Problem zu überprüfen, klicken Sie mit der rechten Maustaste auf den Datensammler mit hoher CPU , der unter dem Knoten " Benutzerdefiniert " aufgeführt ist, und wählen Sie dann "Aktueller Bericht" aus. Der Bericht ähnelt dem folgenden Screenshot.

Das Fenster

Entfernen Sie alle aktuellen Leistungsindikatoren, damit Sie explizite Zähler hinzufügen können, die Sie überprüfen möchten. Wählen Sie den ersten Zähler in der Liste aus, halten Sie die Umschalttaste gedrückt, scrollen Sie bis zum Ende der Liste, wählen Sie den letzten Zähler aus, und drücken Sie dann die Entf-Taste.

Fügen Sie nun den Prozess / % Prozessorzeitindikator hinzu. Folgen Sie diesen Schritten:

  1. Klicken Sie mit der rechten Maustaste auf eine beliebige Stelle im rechten Bereich von Perfmon, und wählen Sie "Zähler hinzufügen" aus.
  2. Erweitern Sie das Process-Objekt .
  3. Wählen Sie in der Liste % Prozessorzeit aus.
  4. Wählen Sie in der Instanzliste alle Instanzen< aus>.
  5. Wählen Sie Hinzufügen.
  6. Wählen Sie OK aus.

Sie verfügen jetzt über eine Anzeige, die ein Diagramm der Prozessorzeit anzeigt, die von jedem Prozess auf dem Computer verwendet wurde, während der Datensammlersatz ausgeführt wurde. Die einfachste Möglichkeit, zu isolieren, welcher Prozess die höchste CPU-Ebene verwendet, besteht darin, das Hervorhebungsfeature von Perfmon zu aktivieren. Wählen Sie den ersten Zähler in der Liste aus, und drücken Sie dann STRG+H. Der ausgewählte Prozess wird als fett schwarze Linie im Diagramm angezeigt.

Verwenden Sie den Pfeil nach unten auf der Tastatur, um durch die Liste der Prozesse zu navigieren, bis Sie den Prozess finden, der die meiste CPU-Auslastung anzeigt. Im folgenden Screenshot können Sie deutlich sehen, dass der w3wp.exe Prozess eine große CPU-Menge verwendet hat. Dieses Ergebnis bestätigt, dass der IIS-Anwendungspool eine hohe CPU-Auslastung auf dem Computer verursacht.

Im Fenster

Tipp

Perfmon kann Ihnen helfen, Leistungsprobleme in Ihrer Anwendung zu ermitteln. Die im Perfmon-Protokoll gesammelten Daten geben an, wie viele Anforderungen ausgeführt werden (mithilfe der objekte ASP.NET und ASP.NET Applications). Außerdem können Sie andere wichtige Leistungsdaten darüber anzeigen, wie Ihre Anwendung ausgeführt wird.

Überprüfen Sie die Dumpdateien, die mithilfe von DebugDiag erstellt wurden, um die Ursache des hohen CPU-Problems zu ermitteln.

Analysieren von Dumps mit DebugDiag

DebugDiag kann viele Probleme erkennen, indem eine automatisierte Speicherabbilddateianalyse ausgeführt wird. Für dieses Problem helfen die Performance Analyzers von DebugDiag, die Ursache für hohe CPU zu identifizieren. Führen Sie die folgenden Schritte aus, um den Analyser zu verwenden:

  1. Wählen Sie in DebugDiag die Registerkarte "Erweiterte Analyse " aus.
  2. Wählen Sie die Leistungsanalysatoren.
  3. Wählen Sie "Datendateien hinzufügen" aus.
  4. Navigieren Sie zu dem Speicherort, an dem die Dumpdateien erstellt wurden. Standardmäßig ist dies ein Unterordner des Ordners "C:\Programme\DebugDiag\Logs ".
  5. Wählen Sie eine der Dumpdateien aus, und drücken Sie dann STRG+A, um alle Dateien in diesem Ordner auszuwählen.
  6. Klicken Sie auf Öffnen.
  7. Analyse starten auswählen.

DebugDiag braucht ein paar Minuten, um die Dateien zu durchsuchen und eine Analyse bereitzustellen. Nach Abschluss dieses Prozesses sehen Sie eine Seite, die dem folgenden Screenshot ähnlich ist.

Internet Explorer-Fenster, in dem der Debug-Analysebericht angezeigt wird.

Am Anfang des Berichts wird Ihnen mitgeteilt, dass eine hohe CPU-Auslastung festgestellt wurde. In der rechten Spalte sehen Sie Empfehlungen, die einen Link zu den sieben führenden Threads nach durchschnittlicher CPU-Zeit enthalten. Wählen Sie diesen Link aus, um Informationen darüber anzuzeigen, was die wichtigsten CPU-Verbraucher getan haben, wie im folgenden Beispiel gezeigt.

Die Seite

In diesem Beispiel wird die default.aspx Seite in der FastApp-Anwendung ausgeführt. Wenn Sie den Aufrufstapel weiter unten (unten auf der Seite) betrachten, können Sie sehen, dass dieser Thread Zeichenfolgenverkettung durchführt. (Beachten Sie den Aufruf System.String.Concat im Aufrufstapel.) Wenn Sie die anderen führenden CPU-Threads analysieren, sehen Sie dasselbe Muster.

Der nächste Schritt besteht darin, das Page_Load Ereignis auf der seite default.aspx der FastApp-Anwendung zu überprüfen. Dort finden Sie den folgenden Code:

htmlTable += "<table>";
for (int x = 0; x < 5000; x++)
{
htmlTable += "<tr>" + "<td>" + "Cell A" + x.ToString() + "</td>";
    htmlTable += "<td>" + "Cell B" + x.ToString() + "</td>" + "</tr>";
}
htmlTable += "</table>";

Diese Art von Code verursacht eine hohe CPU.

Analysieren Sie ETW-Ablaufverfolgungen, die PerfView sammelt

ETW-Ablaufverfolgungen, die Sie mithilfe von PerfView sammeln, sind in erster Linie nützlich, wenn Sie sich an den Microsoft-Support wenden, um weitere Unterstützung zu erhalten. Lassen Sie die ETW-Ablaufverfolgungsdatei bereit, wenn Sie einen Supportfall öffnen, damit Microsoft-Supporttechniker cpu-Verbrauchsmuster im Laufe der Zeit analysieren und die Ursache schneller identifizieren können.

Weitere Informationen zum eigenen Analysieren von ETW-Ablaufverfolgungen finden Sie im PerfView-Lernprogramm: Einfache UNTERSUCHUNG der CPU-Leistung.

Zusammenfassung

Mithilfe von Perfmon, DebugDiag und PerfView können Sie ganz einfach Daten sammeln, um die Ursache einer hohen CPU-Auslastung in Anwendungspools zu ermitteln. Wenn Sie die Ursache nicht finden können, indem Sie diese Techniken verwenden, wenden Sie sich an den Microsoft-Support, um weitere Hilfe zu erhalten. Wenn Sie beim Öffnen eines Falls die Perfmon-Daten und Absturzabbilddateien bereit haben, können Sie die Zeit, die Microsoft-Supporttechniker benötigen, um Ihnen zu helfen, erheblich verkürzen.

Weitere Ressourcen

Haftungsausschluss für Drittanbieterkontakte

Microsoft stellt Kontaktinformationen von Drittanbietern bereit, um Ihnen bei der Suche nach zusätzlichen Informationen zu diesem Thema zu helfen. Diese Kontaktinformationen können ohne vorherige Ankündigung geändert werden. Microsoft gibt keine Garantie für die Genauigkeit von Kontaktinformationen Dritter.