Know-how: Windows Performance Counter

24.01.2005 von Thomas Wölfer und Moritz Jäger
Windows bietet mit den integrierten Performance Countern ein starkes Werkzeug, um Fehlern in der Systemkonfiguration und Flaschenhälsen auf die Schliche zu kommen. Wir erklären die bedeutendsten dieser Leistungsmesser.

Ein System am Laufen zu halten, ist die wichtigste und zugleich schwierigste Aufgabe eines Systemverwalters. Besonders Zeit raubend sind da Probleme, deren Ursache tief in der Architektur liegt und die oftmals nicht auf den ersten Blick ersichtlich ist. Um dem Fehler auf die Schliche zu kommen, ist es sehr hilfreich, die Engpässe und Flaschenhälse des Systems zu kennen und zu lokalisieren.

Genau an diesem Punkt setzen die Windows-eigenen Performance Counter an. Diese überwachen seit Windows NT in der Profi-Line die Leistung der einzelnen Komponenten und stellen sie grafisch dar. Auf den ersten Blick verliert man auf Grund der schieren Masse der verschiedenen Zähler die Übersicht. Hat man sich jedoch einmal eingearbeitet, sind sie ein wertvolles Werkzeug.

Eine Verknüpfung zum Aufruf der Zähler finden Sie in der Verwaltung des Computers. Die Performance Counter verbergen sich hinter dem Punkt Leistung.

Engpässe im System resultieren praktisch immer aus Hardware-Problemen. Dabei kann zu wenig Speicher genauso problematisch sein wie ein zu geringer Netzwerkdurchsatz oder eine überlastete CPU. Im Großen und Ganzen lassen sich die Quellen möglicher Engpässe in sechs Gruppen einteilen:

Um das Thema auszuweiten, bieten wir demnächst einen Workshop an. Darin befassen wir uns detailliert mit dem Unterpunkt "Leistungsdaten-Protokolle und Warnungen" und zeigen Ihnen, wie Sie den System-Monitor an Ihre individuelle Umgebung anpassen können.

Grundlagen und Terminologie der Performance Counter

Ein gegebenes System kann man natürlich für viele Zwecke nutzen. Bei einem Fileserver sind andere Performance-Aspekte entscheidend als bei einem Webserver. Und ein SMTP -Server stellt andere Anforderungen als ein NNTP -Server oder ein Active Directory-Server. Daher ist es auch recht schwierig, konkrete Hinweise auf die entsprechenden Counter zu geben. Letztlich hängen die "wichtigen" Counter davon ab, welchen Server man betreibt und welche Aufgaben dieser im Einzelnen übernehmen soll.

Sinnvoll ist es, wenn Sie die verfügbaren Counter mit dem in Windows integrierten System-Monitor einzeln betrachten und untersuchen, ob der jeweilige Counter für Ihren Bedarf sinnvolle Informationen liefert. Sie können sich beliebig viele Counter auswählen und anzeigen lassen. Den jeweiligen Zählern kann man zur besseren Übersicht eine individuelle Farbe zuteilen. Neben der Darstellung im System-Monitor lassen sich die Zähler auch per WMI und damit per Script auslesen. Wer also will, erstellt sich seine eigene Script-Sammlung zur Überprüfung der wichtigsten Counter.

Nicht alle Counter sind von Haus aus verfügbar, durch die Installation neuer Software erhalten Sie auch neue Zähler. Im Fall eines Webservers haben Sie beispielsweise erst nach der Installation von ASP.Net Zugriff auf die entsprechenden Zähler. Die Indikatoren sind also sowohl Teil der Software als auch des Betriebssystems. Dieser Bericht befasst sich mit den Grundlagen der Performance Counter. Zudem stellen wir Universalzähler vor, die sich stets für die Überwachung des Systems eignen.

Terminologie

Beim Gebrauch der Performance Counter fällt die eigene Terminologie auf. Man spricht von "Objekten" (objects), "Zählern" (counters) und "Instanzen" (instances). Ein "object" entspricht dabei einer Ressource, einer Anwendung oder einem Dienst und ist messbar.

Jedem dieser Objekte sind spezifische "counter" zugeordnet, die verschiedene Leistungsaspekte erfassen. Dazu zählen zum Beispiel Transferraten von Festplatten oder verbrauchte Prozessorzeit. Ebenso gibt es Zähler für die Anzahl übertragener TCP-Pakete, angeforderter Webseiten und andere Informationen.

"Instances" sind Kopien der einzelnen Objekte. Es kann zwar von jedem Objekt weiterhin eine bestimmte Instanz bestehen, allerdings ist nicht überall das Vorhandensein mehrerer Kopien gleichzeitig unterstützt.

Zuvor noch ein Hinweis:

Nicht alle Performance Counter sind auf allen Versionen von Windows verfügbar. Die im Folgenden vorgestellten Zähler sind unter Windows 2003 vorhanden und stehen zumindest unter Windows XP Professional ebenfalls zur Verfügung. In den Klammern finden Sie zudem die jeweilige deutsche Bezeichnung.

Engpässe der CPU

Process\\% Processor Time
(Prozesse\\ Prozessorzeit %)

Der wichtigste Index bei der Messung der CPU-Auslastung zeigt die Zeit in Prozent an, welche die CPU außerhalb des Idle-Threads verbringt. Je länger die CPU außerhalb des Idle-Threads verweilt, desto stärker ist die Auslastung.

Processor\\% Processor Time
(Prozessor\\Prozessorzeit)

Dieser Zähler gibt an, wie viel Prozent der Prozessorzeit tatsächlich zur Ausführung von Instruktionen verwendet werden. Hier handelt es sich um den primären Zähler zum Auffinden von Engpässen der CPU. Je stärker die CPU ausgelastet ist, also je mehr Prozent der Zeit sie sich tatsächlich mit der Ausführung von Instruktionen beschäftigt, umso wahrscheinlicher ist es, dass die CPU einen maximalen Grad an Auslastung erreicht hat. Abhilfe schafft hier ein stärkerer Prozessor.

System\\Processor Queue Length
(System\\Prozessor-Warteschlangenlänge)

Dieser Counter zeigt die Anzahl der Threads in der Prozessor-Warteschlange an. Diese Warteschlange ist für alle CPUs gültig, es gibt also auch auf einem Multi-CPU-System immer nur eine Warteschlange. Wartet ein Thread zu lange, so scheint das zugehörige Programm stehen zu bleiben. Enthält die Warteschlage dauerhaft mehr als zwei Einträge, deutet das auf eine Überlastung der CPU hin.

Process\\% Privileged Time
(Prozesse\\Privilegierte Zeit %)

Dieser Zähler zeigt die Zeit an, die der Prozessor im "privileged mode" verbringt. Der "privileged mode" ist dem Betriebssystem und den Hardware-Treibern vorbehalten. Im Gegensatz dazu gibt es noch den "usermode", in dem Anwendungsprogramme ausgeführt werden. Die hier angegebene Zeit enthält auch die Zeit, die für Interrupts aufgewendet wird. Die Prozentzahl berücksichtigt nicht die Idle-Zeit der CPU. Verbringt der Rechner viel Zeit im "privileged mode", ist das oft ein Anzeichen für eine große Anzahl an Interrupts, die von fehlerhaft funktionierenden Geräten ausgelöst werden.

Processor\\ Interrupts/sec
(Prozessor\\ Interrupts/s)

Der Graph gibt die durchschnittliche Rate an, mit der der Prozessor Hardware-Interrupts pro Sekunde empfängt und bearbeitet. Dieser Wert ist eine indirekte Anzeige der Aktivitäten von Geräten, die Interrupts erzeugen, wie beispielsweise Systemuhr, Maus, Datenträgertreiber, Netzwerkschnittstellenkarten und andere Peripheriegeräte. Diese Geräte erzeugen normalerweise einen Prozessor-Interrupt, wenn ein Vorgang abgeschlossen oder ein Eingreifen erforderlich ist. Steigt der Wert stark an, ohne dass die Systemaktivität gleichzeitig steigt, ist dies meist ein Hinweis auf defekte Hardware.

Speicher-Flaschenhälse finden

Memory\\Page Faults/sec
(Speicher\\Seitenfehler/s)

Dieser Zähler gibt die Anzahl der Seitenfehler pro Sekunde an, wobei sowohl die Anzahl der Hardfaults als auch die der Softfaults enthalten ist. Das ist wichtig, da normale CPUs keine großen Probleme beim Auflösen von Softfaults haben. Bei Softfaults kann die benötigte Seite aus dem RAM aufgelöst werden. Bei Hardfaults hingegen finden Festplattenzugriffe statt, die der Leistung natürlich abträglich sind. Die Hardfaults werden mit anderen Countern gemessen.

Memory\\Page Reads/sec
(Speicher\\Seitenlesevorgänge/s)

Der Counter zeigt, wie oft pro Sekunde die Festplatte eine ausgelagerte Seite einliest. Es handelt sich um die tatsächliche Anzahl an Lese-Operationen und nicht um die Anzahl der Seiten. Dieser Hardfault tritt ein, wenn ein Prozess auf eine Seite zugreift, die sich zwar im virtuellen Adressraum befindet, aber weder im Working Set des Prozesses noch an einer anderen Stelle im RAM zu finden ist. Eine hohe Anzahl an Page Reads/sec ist meist ein deutliches Zeichen dafür, dass es dem System an Speicher mangelt.

Dafür ist auch der nächste Counter wichtig:

Memory\\Page Writes/sec
(Speicher\\Seiten-Schreibvorgänge/s)

Der Zähler gibt die Schreiboperationen an, die pro Sekunde stattfinden, um Seiten auszulagern. Dies geschieht, wenn ein Prozess Speicher vom System angefordert hat, aber nicht mehr genug freies RAM verfügbar ist. Bei speicherintensiven Prozessen, die auf einem System mit zu wenig RAM ausgeführt werden, finden viele solcher Schreibzugriffe statt: Ein sicheres Zeichen dafür, dass Sie mehr Speicher im System benötigen.

Relevante Zähler der Festplatten

Physical Disk\\Current Disk Queue Length
(Physikalischer Datenträger\\Aktuelle Warteschlange)

Der Counter zeigt die Menge der Anfragen, die zum Zeitpunkt des Snapshots noch nicht abgearbeitet waren - es handelt sich also um keinen Durchschnittswert. Eine andauernd lange Warteschlange und ein damit ständig hoher Zähler zeigen eine hohe Festplattenauslastung an. Eine schnellere Festplatte schafft hier Abhilfe.

Physical Disk\\Split IO/Sec
(Physikalischer Datenträger\\Teil-E/A/s)

Hier wird die Teilungsrate der E/As auf dem Datenträger angegeben. Ein E/A kann geteilt werden, wenn Daten angefordert werden, die zu groß für einen einzelnen E/A sind oder wenn der Datenträger fragmentiert ist.

Logical Disk\\Current Disk Queue Lenght
(Logischer Datenträger\\Aktuelle Warteschlange)

Auch hier zeigt der Shapshot die Anzahl der Anfragen an, die zum Zeitpunkt der Anfrage nicht abgearbeitet waren. Allerdings steht dieser Zähler für die logischen Partitionen der physikalischen Festplatte.

Flaschenhälse beim Caching

Memory\\Cache Faults/sec
(Speicher\\Cache-Fehler/s)

Der Filesystem-Cache ist stark von der Größe des Arbeitsspeichers abhängig und daher an dessen Engpässe gebunden. Dieser Zähler gibt an, wie oft pro Sekunde eine Seite im Filesystem-Cache gesucht, dort aber nicht gefunden wurde. Befindet sich die Seite noch im RAM, handelt es sich um einen Softfault. Muss sie von der Festplatte nachgeladen werden, liegt ein Hardfault vor. Eine hohe Anzahl an Cache-Faults pro Sekunde bedeutet, dass nicht genug RAM im System vorhanden ist.

Memory\\Committed Bytes
(Speicher\\ Zugesicherte Bytes)

Der Counter gibt den zugesicherten virtuellen Speicher in Bytes an. Zugesicherter Speicher ist physikalischer Speicher, für den in Auslagerungsdateien Speicherplatz reserviert wurde. Es können eine oder mehrere Auslagerungsdateien auf jedem physikalischen Laufwerk vorhanden sein. Dieser Indikator zeigt nur den letzten Wert an, er ist kein Durchschnittswert. Ist der Wert beständig hoch, kann eine größere Auslagerungsdatei helfen.

Einen Überblick über die Auslagerungsdateien verschafft der nächste Zähler:

Memory\\Commit Limit
(Speicher\\Zusagegrenze)

Virtueller Speicher in Bytes, der zugesichert werden kann, ohne die Auslagerungsdatei zu vergrößern. Zugesicherter Speicher ist physikalischer Speicher, für den in den Auslagerungsdateien Speicherplatz reserviert wurde. Auf jedem logischen Laufwerk kann sich eine Auslagerungsdatei befinden. Wenn die Auslagerungsdateien vergrößert werden, wird dieses Limit entsprechend erweitert. Dieser Indikator zeigt ebenfalls nur den letzten Wert an, also keinen Durchschnittswert.

Memory\\Pages Output/Sec
(Speicher\\Geänderte Seiten/s)

Die Rate, mit der Seiten auf den Datenträger geschriebenen werden, um Speicherplatz im physikalischen Speicher freizugeben. Seiten werden nur zurück auf den Datenträger geschrieben, wenn sie im physikalischen Speicher geändert wurden und vermutlich Daten und keinen Code enthalten. Eine hohe Seitenausgabe zeigt, dass es dem System möglicherweise an Arbeitsspeicher mangelt. Windows schreibt mehr Seiten zurück auf den Datenträger, um Speicherplatz freizugeben, wenn wenig Speicherplatz frei ist. Dieser Leistungsindikator zeigt die Seitenanzahl an und kann ohne Konvertierung mit anderen Werten verglichen werden.

Engpässe im Networking

Network Interface\\Bytes Total/sec
(Netzwerkschnittstelle\\Gesamtanzahl Bytes/s)

Der Counter zeigt die Bytes pro Sekunde, die ein Netzwerk-Interface empfängt oder sendet. Ein gegebenes Netzwerk-Interface kann nur eine vorgegebene Menge an Bytes pro Sekunde übertragen, die Höhe der Bandbreite ist von der verwendeten Netzwerkkarte abhängig.

Mit diesem Zähler ist es somit relativ einfach möglich, die Auslastung der Netzwerkkarte zu erfassen. Eine interessante Information also in Bezug auf Server, an die mit einer steigenden Anzahl an Nutzern auch die Anforderungen zunehmen. Weitere Server-bezogene Zähler finden Sie im nächsten Kapitel.

Redirector\\ Current Commands
(Redirectordienst\\ Aktuelle Befehle)

Der Counter zeigt die Anzahl der Anforderungen an den Redirector an, die in der Warteschlange auf die Verarbeitung warten. Übersteigt der Wert die Anzahl der im Computer verbauten Netzwerkkarten, kann es zu Engpässen im System kommen. Mögliche Ursachen sind:

Abhilfe schafft hier eine Aufteilung des Netzwerks.

Network Interface\\Packets Outbound Discarded
Netzwerkschnittstelle\\Ausgehende Pakete, verworfen)

Die Anzahl der ausgehenden Pakete, die abgelehnt wurden, obwohl die Übertragung nicht durch Fehler verhindert wurde. Mögliche Ursache für die Ablehnung von Paketen kann das Freigeben von Pufferspeicher sein.

Network Interface\\Packets Recieved Errors
Netzwerkschnittstelle\\Empfangene Pakete, Fehler

Der Zähler hilft bei der grundlegenden Fehlersuche im Netzwerk. Er zeigt die Anzahl der eingegangenen Pakete an, deren Übergabe an ein übergeordnetes Protokoll durch Fehler verhindert wurde.

Interessante Zähler für Server

Server\\ Bytes Total/sec
(Server\\ Gesamtzahl Bytes)

Der Wert zeigt die gesamte Auslastung an. Er ist ein wichtiger Indikator, wenn es darum geht, sich einen Gesamtüberblick über die Leistungsfähigkeit des Servers zu verschaffen.

Server Work Queues\\Bytes Sent/Sec
(Serverwarteschlangen\\Gesamtzahl Bytes)

Die Geschwindigkeit, mit welcher der Server auf dieser CPU für die Clients Daten von Dateien liest und Daten in Dateien schreibt. Dieser Wert ist ein weiterer Indikator für die allgemeine Auslastung des Servers.

Server\\ Errors System
(Server\\ Systemfehler)

Die Anzeige informiert über die Anzahl gefundener interner Server-Fehler. Treten unerwartete Fehler auf, weisen diese im Allgemeinen auf Server-Probleme hin.

Server\\ Work Items Shortage
(Server\\ Zu wenig Arbeitselemente)

Über diesen Leistungsmesser lässt sich ablesen, wie oft STATUS_DATA_NOT_ACCEPTED zur Empfangsanzeigezeit zurückgegeben wurde. Dies tritt auf, wenn kein Arbeitselement verfügbar ist oder zum Verarbeiten der eingehenden Anforderung zugeordnet werden kann. Der Wert zeigt an, ob der Parameter "InitWorkItems" oder "MaxWorkItems" anders eingestellt werden sollte.

Server\\ Pool Nonpaged Failures
(Server\\ Nicht-Auslagerungsseitenfehler)

Der Indikator zeigt die Anzahl der fehlgeschlagenen Anforderungen für Speicher, der nicht ausgelagert werden darf. Ein hoher Wert weist darauf hin, dass der physikalische Speicher zu gering ist.

Der nächste Zähler setzt genau hier an.

Server\\ Pool Nonpaged Peak
(Server\\ Nicht-Auslagerungsseitenspitze)

Der Counter zeigt die maximale Anzahl an Bytes der Nicht-Auslagerungsseiten, die der Server zu einem beliebigen Zeitpunkt verwendet hat. Der Wert gibt an, wie viel physikalischer Speicher im Server vorhanden sein sollte.

Server Work Queues\\Work Item Shortages
(Serverwarteschlangen\\Geliehene Arbeitselemente)

Jede Anfrage von einem Client wird im Server als "Arbeitsobjekt" dargestellt. Der Server verwaltet eine bestimmte Anzahl verfügbarer Arbeitsobjekte pro CPU, um die Bearbeitung zu beschleunigen. Wenn eine CPU über keine Arbeitsobjekte mehr verfügt, leiht sie ein verfügbares Arbeitsobjekt von einer anderen CPU aus. Ein ansteigender Wert dieses Indikators weist möglicherweise darauf hin, dass die Registrierungswerte für "MaxWorkItems" oder "MinFreeWorkItems" für den Server-Dienst erhöht werden müssen. Dieser Wert ist bei blockierten Warteschlangen immer null.