Sammeln von Leistungsdaten
Rufen Sie nach dem Erstellen einer Abfrage und dem Hinzufügen von Leistungsindikatoren die PdhCollectQueryData-Funktion auf, um die aktuellen Rohdaten für alle Indikatoren in der Abfrage abzurufen.
Viele Indikatoren, z. B. Ratenindikatoren, erfordern zwei Datenbeispiele, um einen formatierten Datenwert zu berechnen. PDH verwaltet Daten für das aktuelle Beispiel und die zuvor gesammelte Stichprobe. Im folgenden Verfahren wird beschrieben, wie Leistungsindikatorenwerte gesammelt werden, die zwei Beispiele zum Berechnen eines anzeigebaren Werts erfordern.
So sammeln Sie Leistungsindikatorenwerte, die zwei Beispiele zum Berechnen eines anzeigebaren Werts erfordern
- Rufen Sie PdhCollectQueryData auf, um das erste Beispiel zu erfassen.
- Rufen Sie die Sleep-Funktion auf, um mindestens eine Sekunde zwischen Sammlungen zu warten.
- Rufen Sie PdhCollectQueryData erneut auf, um das zweite Beispiel zu sammeln.
- Rufen Sie die PdhGetFormattedCounterValue-Funktion auf, um einen anzeigebaren Wert zu berechnen.
- Wiederholen Sie die Schritte 2 bis 4.
Alternativ zum Implementieren eines Wartezeitraums können Sie die PdhCollectQueryDataEx-Funktion aufrufen, die einen Timingthread erstellt, der eine bestimmte Zeit wartet, das Beispiel sammelt und dann ein anwendungsdefiniertes Ereignis auslöst.
Wenn Sie Leistungsdaten aus einer Protokolldatei abfragen möchten, können Sie auch einen Zeitbereich definieren. Der Zeitbereich schränkt die Abfrage auf die Stichproben ein, die innerhalb des Zeitbereichs gesammelt wurden (jedes Beispiel enthält einen Zeitstempel für den Zeitpunkt der Erfassung). Weitere Informationen zum Festlegen und Abrufen von Zeitbereichen finden Sie unter Festlegen eines Zeitbereichs für eine Abfrage.
Wenn Sie Leistungsdaten sammeln und in eine Protokolldatei schreiben möchten, rufen Sie die PdhUpdateLog-Funktion auf, anstatt PdhCollectQueryData aufzurufen. Ausführliche Informationen finden Sie unter Arbeiten mit Protokolldateien und Schreiben von Leistungsdaten in eine Protokolldatei.
Ausführliche Informationen zum Berechnen eines anzeigebaren Beispielwerts finden Sie unter Anzeigen von Leistungsdaten.
Grundlegendes zu mehreren Prozessorindikatoren
Einige Leistungsindikatoren wurden für Einzelprozessorsysteme entwickelt und sind möglicherweise nicht genau für Multiprozessorcomputer. Ein Prozess ist beispielsweise auf 100 Prozent eines einzelnen Prozessors beschränkt; Seine Threads können jedoch mehrere Prozessoren verwenden, insgesamt mehr als 100 Prozent.
Der Zählerwert "\Processor(_Total)\% Prozessorzeit" ist die durchschnittliche Auslastung aller Prozessoren. Wenn Sie beispielsweise über zwei Prozessoren verfügen, einen mit 100 Prozent und einen anderen mit 0 Prozent, meldet dieser Zähler 50 Prozent. Der Bereich liegt also zwischen 0 und 100.
Der Zählerwert "\Process(X)\% Prozessorzeit" (wobei X der Prozessname ist) ist die Summe der Prozessornutzung durch alle Threads des Prozesses X. Wenn ein Prozess beispielsweise auf einem Computer mit zwei Prozessoren über zwei Threads verfügt, von denen einer 75 Prozent einer CPU und der andere 80 Prozent einer anderen CPU umfasst, meldet dieser Zähler 155 Prozent. Der Bereich für diesen Indikator liegt zwischen 0 und 100 * ProcessorCount.
Wenn Sie das Process
Counterset verwenden, können Sie Werte außerhalb des erwarteten Wertebereichs für die CPU-Auslastung empfangen. Um den Prozentsatz der CPU-Auslastung zu berechnen, benötigt PDH zwei Beispiele (jeweils mit einem Rohwert und einem Zeitstempel). Da PDH nur den instance Namen verwendet, um den Prozessen zu entsprechen, kann es manchmal Beispiele aus verschiedenen Prozessen mischen. Wenn beispielsweise drei Prozesse mit demselben instance Namen stichprobenweise erfasst werden und einer der Prozesse nach dem dritten Beispiel beendet wird, wechselt ein anderer Prozess in den von diesem beendeten Prozess geräumten Slot. Daher stellt ein formatierter Zähler beim Formatieren des vierten Beispiels einen falschen Wert bereit, da das dritte Beispiel aus dem beendeten Prozess und das vierte Beispiel aus dem Prozess verwendet wird, das in den Slot des beendeten Prozesses verschoben wurde.
Die folgende Tabelle zeigt, wie dies geschehen kann, wenn ein Prozess beendet wird, während Daten gesammelt werden. Die Tabelle enthält fünf Indikatorenwertbeispiele für drei Instanzen von Prozess X. Die Proben werden in Intervallen von einer Sekunde gesammelt. Nachdem das dritte Beispiel gesammelt wurde, wird der Prozess X in Slot 1 beendet. Wenn Der Prozess X in Slot 1 beendet wird, wird X in Slot 2 zu Slot 1 verarbeitet. Wenn Sie das vierte Beispiel für Prozess X in Slot 2 sammeln, ist der erste Wert jetzt 20 statt 1.000, und der zweite Wert ist 1.500. Wenn Sie den Zählerwert formatieren, erhalten Sie 1.480 Millisekunden anstelle der erwarteten 500 Millisekunden. Wenn Sie den fünften Beispielwert formatieren, sollten Sie den erwarteten Wert abrufen.
Beispiel | Slot 0 für Prozess X | Slot 1 für Prozess X | Slot 2 für Prozess X |
---|---|---|---|
Beispiel 1 | 0 | 0 | 0 |
Beispiel 2 | 20 | 10 | 500 |
Beispiel 3 | 40 | 20 | 1\.000 |
Beispiel 4 | 60 | 1.500 (vom ehemaligen Slot 2) | Nicht zutreffend Jetzt in Slot 1 gesammelt. |
Beispiel 5 | 80 | 2\.000 | Nicht zutreffend Jetzt in Slot 1 gesammelt. |
Tipp
Ab Windows 10 20H2 können Sie dieses Problem vermeiden, indem Sie das neue Process V2
Zählerset verwenden. Das Process V2
Counterset enthält die Prozess-ID im instance Namen. Dadurch werden inkonsistente Ergebnisse vermieden, die mit dem ursprünglichen Process
Counterset angezeigt werden.