Aktivieren der Erfassung von Heapdaten
Die Prozess-Heap-Analyse ist am effektivsten, wenn Stapel gesammelt werden, indem HeapAlloc- und HeapRealloc-Ereignisse erfasst werden. Um Stapel mit Symbolen zu entschlüsseln, müssen Sie die Symboldecodierung aktivieren. Sie können Heap-Daten entweder beim Start eines Prozesses oder bei einem bestehenden Prozess erfassen.
So aktivieren Sie die Datenerfassung beim Starten eines Prozesses
In diesem Beispiel wird der zu analysierende Prozess über die Befehlszeilensequenz gestartet, die die Datenerfassung beginnt. Durch die Aktivierung der Datenerfassung beim Starten eines Prozesses wird sichergestellt, dass keine Zuordnungsinformationen oder der Verlauf verloren gehen. Führen Sie die folgenden Schritte aus, um die Datenaufnahme beim Starten des Prozesses zu aktivieren:
Geben Sie in einer erweiterten Eingabeaufforderung den folgenden Befehl ein:
xperf -on Base -BufferSize 1024 -MinBuffers 10 -MaxBuffers 16
Nachfolgend ein Beispielbefehl:
xperf -start HeapSession -heap -PidNewProcess "C:\Program Files\Windows Sidebar\sidebar.exe" -BufferSize 1024 -MinBuffers 128 -MaxBuffers 128 -stackwalk HeapAlloc+HeapRealloc
Die Seitenleiste wird auf dem Desktop geöffnet.
In der folgenden Tabelle werden diese Befehle beschrieben.
Befehl Beschreibung -Start HeapSession
Initialisiert eine Tracing- oder Logger-Sitzung. In diesem Fall heißt die Sitzung "HeapSession".
-heap
Identifiziert "HeapSession" als eine Heap-Trace.
-PidNewProcess
Initialisiert einen Prozess. In diesem Fall wird die Windows-Seitenleiste initialisiert.
-BufferSize
Legt die Puffergröße des Puffers fest, in dem die Ereignisdaten gespeichert werden. Eine optimale Größe für einen Puffer beträgt 1024 KB. Die Standardeinstellung ist 64 KB.
-MinBuffers
Legt die Mindestanzahl von Puffern für die Speicherung von Ereignisdaten fest. MinBuffers sollten MaxBuffers gleich sein, um die Konsistenz zwischen den Spuren zu gewährleisten.
-MaxBuffers
Weisen Sie MaxBuffers konservativ zu, da Puffer aus nicht ausgelagertem Speicher zugewiesen werden, der eine endliche Systemressource ist.
-stackwalk
Initialisiert die Stackwalk-Funktion, um Zuordnungs- und Deallocation-Informationen zu sammeln und diese Informationen mit bestimmten Threads zuzuordnen.
HeapAlloc+HeapRealloc
Identifiziert bestimmte Heap-Ereignisse, die von der Stackwalk-Funktion erfasst und dargestellt werden sollen.
Geben Sie den folgenden Befehl ein:
xperf -stop -stop HeapSession -d HeapTrace.etl
Der
-d HeapTrace.etl
Befehl führt die in der Sitzung erzeugten Spuren in der Datei "HeapTrace.etl" zusammen.
So aktivieren Sie die Datenerfassung für einen bestehenden Prozess
Diese Option ermöglicht die Datenerfassung, ohne den Prozess zu beenden und neu zu starten. Dies kann von Vorteil sein, wenn das zu analysierende Szenario erst lange nach dem Start der Anwendung auftritt und eine anfängliche Heap-Zuweisung (die extrem große Trace-Dateien erzeugen kann) nicht erforderlich ist.
Führen Sie die folgenden Schritte aus:
Starten Sie den NT Kernel Logger von einer erweiterten Eingabeaufforderung aus, und zwar mit dem Flag BASE wie folgt:
xperf -on BASE
Um das Heap-Tracing für einen bestehenden Prozess zu aktivieren, ersetzen Sie XXX durch die tatsächliche Prozess-ID in dem folgenden Befehl:
xperf -start HeapSession -heap -Pid XXX -BufferSize 1024 -MinBuffers 128 -MaxBuffers 128 -stackwalk HeapAlloc+HeapRealloc
Bereiten Sie die Traces für die Analyse auf die gleiche Weise wie bei der Datenerfassung vor, wenn ein Prozess gestartet wird:
xperf -stop -stop HeapSession -d heapTrace.etl