Umdhtools.exe: Verwendung von Umdh.exe Speicher gefunden von Speicherverlusten

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 268343 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

User-Mode Dump-Heap (UMDH)-Dienstprogramm arbeitet mit den Betriebssystem Windows Heapzuweisungen für einen bestimmten Prozess zu analysieren. Dieses Dienstprogramm und anderen Tools zugeordnet, sind hauptsächlich abzielt. für Windows 2000 und Windows XP. Klicken Sie auf die Wiedergeben Schaltfläche, um diese streaming-Demonstration anzuzeigen.

Hinweis Das Video mit ® ACELP-Codec codiert ist, müssen Sie den freien ® ACELP-Codec finden Sie unter Installieren http://www.ACELP.NET/acelp_eval.PHP



Hinweis Da die malloc Funktion in C Run-Time (CRT)-Modul verwendet die Rahmenzeigerauslassung (FPO) auf der Originalversion von Windows Server 2003, werden u.u. nicht die vollständigen Stapel-Informationen von der malloc die Funktion mit das UMDH-Tool. Dieses Problem wird in der CRT-Modul von Windows Server 2003 Service Pack 1 (SP1) behoben. Daher sehen Sie die vollständige Stapelinformationen der Malloc-Funktion in Windows Server 2003 SP1.

Weitere Informationen

Vor der Verwendung UMDH

Wenn Sie glauben, dass Sie einen Speicherverlust auftritt, sollten Sie beachten der Speicher, dass undichte Stellen möglicherweise nicht was sie zu sein scheinen. Können Sie entdecken, der ein Speicherverlust ist nicht true Speicherverlust, jedoch eine Leistungssteigerung. Für Beispiel, das Microsoft Jet-Datenbankmodul kann große Mengen an Arbeitsspeicher belegen. (bis zu 128 MB auf einem Computer 256 MB), da er ruft Daten ab und schreibt Caches. Der Cache ermöglicht es, die Jet-Engine erhalten Sie schnelle Read-ahead und Write-ahead Pufferung.

Um zu ermitteln, unabhängig davon, ob ein Prozess auftritt Speicher-Lecks verwenden Windows-Systemmonitor (Perfmon.exe) und Private überwachen Bytes in der Kategorie Prozess für Ihre Anwendung. Private Bytes ist der Gesamter Arbeitsspeicher, dass der Prozess reserviert hat, aber ist nicht mit anderen freigeben verarbeitet. Beachten Sie, dass dies andere virtuelle Bytes ist also auch interessant um zu überwachen. Virtuelle Größe ist die aktuelle Größe in Bytes der virtuelle Adressraum des Prozesses verwendet. Eine Anwendung kann virtuelle verlieren. Speicher, aber einen Unterschied in der privaten Bytes nicht sehen kann, die zugewiesen werden. Wenn Sie Speicher erhöhen, wenn Sie die privaten Bytes, aber Sie überwachen, nicht angezeigt vermuten Sie, dass Sie noch nicht genuegend Arbeitsspeicher, Monitor virtuelle Bytes anzeigen ausgeführt werden Wenn Sie für virtuellen Speicher verwenden werden. Weitere Informationen zum Erkennen von Speicherverlusten und Übersicht über die Windows-Systemmonitor (Perfmon.exe) finden Sie auf der folgenden Microsoft-Website:
http://msdn.Microsoft.com/en-us/library/ms404355.aspx
Um sicherzustellen, dass Ihre Anwendung ein Speicherverlust auftritt, setzen Sie die vermuten Sie Code in einer Schleife mit vielen Wiederholungen und überwachen Sie dann die privaten und virtuelle Bytes für alle Erhöhungen des Speichers. Beobachten, um sicherzustellen, dass die Anzahl der private und virtuelle Bytes schließlich bleibt nicht gleich und die Anzahl Tabstopps zu erhöhen. Wenn es ein Punkt, an dem der Speicher wird beendet erhöhen (z. B. es überprüft nicht weiter auf unbestimmte Zeit steigen) Sie tun einen Speicherverlust aber eher nicht angezeigt wird, sehen Sie einen Cache, die auf wächst seine Maximale Größe.

Wenn Sie feststellen, dass Sie einen Speicherverlust, bevor Sie Sie sehen Verwenden Sie UMDH, gehen Sie folgendermaßen vor:
  1. Das UMDH-Dienstprogramm zu installieren.
  2. Legen Sie die Umgebungsvariable SYSTEMPFAD enthalten die der Ordner, in dem UMDH installiert.
  3. Legen Sie die Umgebungsvariable _NT_SYMBOL_PATH auf der Microsoft symbol Serverpfad, sodass UMDH Debug-Symbol suchen können Dateien.
Das UMDH-Dienstprogramm ist im Lieferumfang der Debugtools für Windows Windows-Produkte auf der folgenden Microsoft-Website:
http://www.Microsoft.com/whdc/devtools/DDK/default.mspx
Downloaden Sie und installieren Sie das Dienstprogramm, und legen Sie das Pfad-system Umgebungsvariable, um den Pfad, in dem die debugging Tools installiert wurden.

Bevor Sie UMDH verwenden, müssen Sie die richtigen Debug-Symbolen für installieren. die Komponenten Ihrer Anwendung und Ihr Betriebssystem. Verwenden Sie das Microsoft Symbolserver, Debugsymbole für Microsoft-Komponenten zu erhalten. Weitere Informationen finden Sie über den Symbolserver von Microsoft in folgendem Artikel der Microsoft Knowledge Base anzuzeigen:
311503Verwenden Sie die Microsoft-Symbolserver, um Debug-Symboldateien zu erhalten
UMDH sucht nach Symboldateien mithilfe der Die Umgebungsvariable _NT_SYMBOL_PATH. Der Befehl zum Festlegen des Pfads von einer Eingabeaufforderung könnte etwa wie folgt aussehen:
Legen Sie die _NT_SYMBOL_PATH = SRV * C:\LocalSymbolCache
Weitere Informationen zum Einrichten von symbolischen debugging Informationen hierzu finden Sie im Abschnitt "Debugsymbole" weiter unten in diesem Artikel.

Nachdem Sie diese Schritte abgeschlossen haben, können Sie das Dienstprogramm UMDH verwenden.

Erfassen von Heap bildet mit UMDH

UMDH ist ein Dienstprogramm, das Informationen über den Heap sichert Zuordnungen eines Prozesses. Zu diesen Informationen gehören die Aufrufliste für jeden Zuweisung, die Anzahl der Zuordnungen, die über die Aufrufliste vorgenommen werden und die Anzahl der Bytes, die über die Aufrufliste verbraucht werden. Zum Beispiel:
00005320 bytes in 0x14 allocations (@ 0x00000428) by: BackTrace00053
           ntdll!RtlDebugAllocateHeap+0x000000FD
           ntdll!RtlAllocateHeapSlowly+0x0000005A
           ntdll!RtlAllocateHeap+0x00000808
           MyApp!_heap_alloc_base+0x00000069
           MyApp!_heap_alloc_dbg+0x000001A2
           MyApp!_nh_malloc_dbg+0x00000023
           MyApp!_nh_malloc+0x00000016
           MyApp!operator new+0x0000000E
           MyApp!LeakyFunc+0x0000001E
           MyApp!main+0x0000002C
           MyApp!mainCRTStartup+0x000000FC
           KERNEL32!BaseProcessStart+0x0000003D
				
Diese UMDH-Ausgabe zeigt, dass es 21280 (0x5320 wurden) zugewiesene Bytes Gesamtanzahl der aus der Aufrufliste. 21280 Bytes aus 20 zugewiesen wurden (0 x 14) Trennen Sie die Zuweisungen von 1064 Bytes (0x428). Die Aufrufliste erhält ein Bezeichner des BackTrace00053.

Um eine Speicherabbilddatei des Heaps zu erzeugen. Umlage, müssen Sie das Dienstprogramm "Gflags.exe" verwenden, die auch mit enthalten ist das Debugging Tools for Windows-Produkte, damit das Betriebssystem, die wissen, dass Möchten Sie den Kernel, um die Zuweisungen zu verfolgen.

Angenommen, Sie möchten um den Inhalt des Heap(s) für "Notepad.exe" zu sichern. Zuerst müssen Sie die Stack-Trace aktivieren Anschaffung für die Anwendung, die Sie testen möchten. Standardmäßig ist diese Funktion ist nicht aktiviert. Der Befehl zum Aktivieren dieses Features ist wie folgt:
GFlags -i "Notepad.exe" + Ust
Der Befehl ist nicht für Prozesse Stack-Trace aktivieren, sind bereits ausgeführt, aber es ermöglicht die Stack-Trace für alle zukünftigen Ausführungen Notepad.exe. können Sie auch das Flag durch den Benutzer GFLAGS festlegen Schnittstelle (Gflags.exe ohne Argumente erhalten Sie die Benutzeroberfläche ausgeführt werden). Verwendung die Ust- Option für Gflags deaktiviert Stapel Ablaufverfolgung Sie beendet das Debuggen.

Wenn Sie die Image-Flags durch "Gflags.exe" festlegen, und die Debugsymbole einrichten, können Sie (im Editor zu starten Anwendungen, die UMDH). Nachdem das Programm gestartet wird, müssen Sie den Bestimmen Sie die Prozess-ID (PID) des Editor-Prozesses, der gerade gestartet wurde. Der Befehl für diese lautet wie folgt:
tlist
Sie finden die PID aus der Ausgabe der Anwendung "tlist". Die PID-Informationen kann auch mit dem Task-Manager abgerufen werden. Nehmen Sie an die PID der Editor-Prozess, den Sie soeben gestartet ist 124. Sie können UMDH verwenden, erhalten eine Heapdump mit dem folgenden Befehl:
Umdh - p: 124 - f:notepad124.log
Ergebnisse: Sie haben einen vollständigen Heapdump des Editor-Prozesses in der Notepad124.log-Datei. Diese Datei enthält alle Zuweisungen, die vorgenommen wurden und die zugehörigen Aufruflisten, in denen die Zuweisungen vorgenommen wurden.

Verwenden von Umdh.exe to Compare UMDH Protokolle

Während die UMDH-Protokolldatei, wertvollen Informationen über enthält die aktuellen Status des Heaps für einen Prozess, wenn Sie Bedenken hinsichtlich der Feststellung haben eine Speicherverlust, wäre es noch wertvoller, um die Ausgaben der beiden Protokolle zu vergleichen und Erfahren Sie, welche Callstack das größte Wachstum zwischen den zwei Dumpdateien erkannt wurden. Das Dienstprogramm Umdh.exe hilft beim Vergleichen von zwei UMDH-Protokolle, um eine Analyse der bereitzustellen der der Unterschied zwischen ihnen. Haben Sie einmal zwei Protokolle, die bei den einzelnen erfasst Intervalle, können Sie dann den folgenden Befehl ein:
UMDH dh1.log dh2.log > cmp12.txt
? oder ?
UMDH -d-dh1.log-dh2.log > cmp12.txt
Die -d Befehlszeile-Option weist die anzuzeigende dezimale anstelle von UMDH Hexadezimal. Die Ausgabe des Befehls zeigt die Unterschiede von der Zuordnungen zwischen den beiden protokolliert und enthält Informationen, die ähnlich ist die folgenden:
+ 5320 (f110 - 9df0) 3a Zuweisungen BackTrace00053 Insgesamt erhöhen == 5320
Für jede BackTrace in den Protokolldateien des UMDH ist es ein Vergleich zwischen den zwei Protokolldateien vorgenommen. In diesem Fall zeigt, dass die letzte Protokolldatei, die in der UMDH angegebene hatte Befehlszeile während der ersten zugewiesenen 0xF110-bytes Log in der Befehlszeile UMDH hatte 0x9DF0 Bytes, die für die gleichen BackTrace reserviert (Aufrufliste). "5320" Ist der Unterschied in der Anzahl der zugeordneten Bytes. In diesem Fall gab es 0x5320, die mehr Bytes, zwischen den Zeiten reserviert, die zwei Protokolle erfasst wurden. Die Bytes stammt aus der Aufrufliste, die durch identifiziert wird "backtrace00053".

Die nächste Schritt ist, um herauszufinden, was in, ist Backtrace. Wenn Sie die zweite Protokolldatei and Search for öffnen BackTrace00053, vielleicht etwas, ähnlich dem folgenden:
00005320 bytes in 0x14 allocations (@ 0x00000428) by: BackTrace00053
           ntdll!RtlDebugAllocateHeap+0x000000FD
           ntdll!RtlAllocateHeapSlowly+0x0000005A
           ntdll!RtlAllocateHeap+0x00000808
           MyApp!_heap_alloc_base+0x00000069
           MyApp!_heap_alloc_dbg+0x000001A2
           MyApp!_nh_malloc_dbg+0x00000023
           MyApp!_nh_malloc+0x00000016
           MyApp!operator new+0x0000000E
           MyApp!LeakyFunc+0x0000001E
           MyApp!main+0x0000002C
           MyApp!mainCRTStartup+0x000000FC
           KERNEL32!BaseProcessStart+0x0000003D
				
Wenn Sie die Aufrufliste anzeigen, können Sie sehen, die die LeakyFunc Funktion weist Speicher über die Visual C++-Laufzeitfehler Bibliothek neue Operator-Funktion. Wenn Sie, dass die Anzahl der Zuordnungen feststellen wird vergrößert, als Sie Weitere Dump-Dateien nutzen, können Sie diesen Speicher schließen nicht freigegeben wird.

Aktivieren von Stapelüberwachungen

Die wichtigste Informationen in UMDH-Protokollen wird der Stack-traces der Heapzuweisungen. Sie können analysieren, um zu überprüfen, ob ein Prozess Heap von Speicherverlusten Speicher. In der Standardeinstellung werden diese Stapelüberwachungen nicht erworben werden. Sie können dies aktivieren pro Prozess oder System-Wide-Funktion. Verwenden Sie den folgenden Befehl, um Stapel aktivieren Ablaufverfolgung systemweite:
GFlags - R + ust
Starten Sie den Computer neu, nachdem dieser Befehl. Für pro Prozess aktiviert haben, lautet der Befehl wie folgt:
GFlags -i APPNAME + ust
WHERE APPNAME ist der Dateiname der ausführbaren Datei die Erweiterung (für einschließlich b. Services.exe, Lsass.exe). Der Befehl aktivieren nicht Stack-Trace für einen Prozess, der bereits ausgeführt wird. Aus diesem Grund für Prozesse, die nicht möglich (z. B. Dienste, Lsass, Winlogon) neu starten, müssen Sie den test Computer.

Verwenden Sie die folgenden Befehle, um zu überprüfen, welche Einstellungen verfügen systemweite oder für einen bestimmten Prozess festgelegt wurden: systemweite:
GFlags - r
Bestimmten Prozess:
GFlags -i ANWENDUNGSNAME
Standardmäßig beträgt die maximale Stack Trace-Tiefe 16. Wenn Sie möchten finden Sie unter tiefere zugehörigen Aufruflisten, können Sie dies durch Ausführen von GFLAGS erhöhen. Klicken Sie auf In der Systemregistrierung, und geben Sie dann eine neue Tiefe in der Max. Stapeltiefe Trace-Aufzeichnung Edit-Steuerelement. Klicken Sie auf Anwenden, und starten Sie den Computer neu.
WICHTIG: Wenn Sie Windows NT 4.0 Service Pack 6 verwenden, müssen Sie verwenden. Verwenden Sie Umdh_nt4.exe, anstelle von Umdh.exe, und Sie müssen die GFlags -r Befehl zum Festlegen von systemweiten Stack-Trace. Stellen Sie sicher, dass Sie Starten Sie den Computer neu. Umdh_nt4-Stack-Trace funktioniert nicht auf einer pro Prozess Basis auf Windows NT, Version 4. Sie müssen für das gesamte System festgelegt werden.

Debug-Symbole

Einer der wichtigsten Schritte für die Verwendung von UMDH besteht darin, sicherzustellen dass gute Symboldateien (DBG- oder PDB-Datei Ihnen), um eine gute Stapelüberwachung zu erhalten. Zumindest benötigen Sie die Symboldateien für Kernel32.dbg und Ntdll.dbg. Sie können erwerben Sie zusätzliche debugging-Symbole, die Sie möglicherweise benötigen, wie Sie mehr erfahren Welche Komponenten Speicherverlust. Weitere Informationen Informationen zum Abrufen von Debugsymboldateien für Microsoft Komponenten, finden Sie in folgendem Artikel der Microsoft Knowledge Base anzuzeigen:
311503Verwenden Sie die Microsoft-Symbolserver, um Debug-Symboldateien zu erhalten
Weitere Informationen zur Verwendung der Microsoft-Symbolserver und so erhalten Sie die Windows-Symbol-Paketen finden Sie auf der folgende Microsoft-Website:
http://www.Microsoft.com/whdc/devtools/DDK/default.mspx
Wenn Sie Komponenten mit Visual C++ erstellen, ist es wichtig, Sie haben nicht die Programmdatenbank zum Bearbeiten und Fortfahren für C++ ausgewählt Compileroptionen. Wählen Sie stattdessen die Programmdatenbank. Um, legen Sie den Symbolpfad Initialisieren Sie die Umgebungsvariable _NT_SYMBOL_PATH auf den Pfad zum verwendet werden. Sie können die Microsoft-Symbolserver verwenden Symbole für Microsoft erwerben Komponenten.
311503 Verwenden Sie die Microsoft-Symbolserver, um Debug-Symboldateien zu erhalten
Folgen Sie diesen Schritten die _NT_SYMBOL_PATH festlegen Umgebungsvariable:
  1. Doppelklicken Sie in der Systemsteuerung auf System.
  2. Klicken Sie auf die Erweiterte Registerkarte, und klicken Sie dann auf Umgebungsvariablen.
Oder Sie können festlegen, dass die Umgebungsvariable _NT_SYMBOL_PATH in einem Befehlsfenster, bevor UMDH ausgeführt wird.

HINWEIS: Auch die Includepfad die PDBs für die Komponenten von Ihrem Anwendung. Legen Sie beispielsweise den Pfad für _NT_SYMBOL_PATH folgt:
SRV*c:\Symbols*http://MSDL.Microsoft.com/Download/Symbols;c:\myapplicationssymbols
Im erste Teil dieser Pfad verweist, auf dem Microsoft-Symbolserver und zeigt an, dass die Symbole, mit denen in der c:\symbols heruntergeladen werden Ordner. Das Teil, der das Semikolon wird der Pfad zur PDB-Dateien (symbol-Dateien) speziell für die auslaufenden Anwendung.

UMDH aufrufen

Der einzige erforderliche Befehlszeilenparameter für UMDH ist die -p Option, die die PID des Prozesses aus dem gibt einen Heap Dump wird abgerufen. Die PID kann abgerufen werden, mithilfe des Task-Managers oder der Tlist.exe Programm. Das Protokoll wird für einen Befehl ähnlich dem folgenden in die Standardausgabe ausgegeben:
Umdh - p: PID
UMDH werden auch verschiedene Informationsmeldungen Standard angezeigt. Fehler, und deshalb Wenn Sie es nicht umleiten, es wird gemischt mit echten Log. Verwenden Sie den folgenden Befehl, um die UMDH-Informationsmeldungen in einer Datei zu sammeln:
Umdh - p: PID-2>umdh.msg
Wenn Sie möchten das Protokoll zu sammeln, das durch UMDH in einer Datei gespeichert wird, Verwenden Sie eine der folgenden Befehle:
Umdh - p: PID > umdh.log
? oder ?
Umdh - p: PID-f:umdh.log
Diese Befehle sind äquivalent.

Das Standardprotokoll, das ist gewonnen durch UMDH enthält eine Aufzählung der Heap-Verbraucher, die nach der sortiert werden Anzahl von Samplezuweisungen. Wenn für Debugzwecke, Sie auch eine Speicherabbilddatei aller benötigen der zugewiesenen Blöcke mit ihren entsprechenden Stack-Traces die -d Option kann verwendet werden:
Umdh - p: PID -d
Wenn Sie diesen Befehl verwenden, wird möglicherweise in der UMDH die folgenden angezeigt: Protokolldatei:
Verteilungen für Trace BackTrace00046: 005F69A0 005F6150
Hierbei handelt es sich um die Speicheradressen der Zuweisungen für CallStack. Wenn der Debugger an den Prozess angefügt ist, Sichern Sie die der Inhalt des Speichers an diese Adressen zu überprüfen, was reserviert wurde.

Wenn das Protokoll zu viele Informationen enthält, kann es nur auf beschränkt werden Big Benutzer mit die Verteilung über einem bestimmten Schwellenwert zu zählen. Verwendung der folgenden Befehl ein:
Umdh - p: PID - t: SCHWELLENWERT
Alle Befehlszeilenoptionen (z. B. -p, -f, -t, -d) können gleichzeitig in beliebiger Reihenfolge angegeben werden. Der folgende Code ist ein schwieriger Befehlszeilenbeispiel:
Umdh - p: 123 - t: 1000 - f:umdh.log -d
Dieser Befehl gibt die Heaps für den Prozess mit PID 123 in die Datei Umdh.log. Sichert nur die Stack-Traces, Konto, für mehr als 1000 Reservierungen und er bildet auch die Adressen der Heap-Blöcke, die über jede Stapelüberwachung zugewiesenen.

Eine weitere nützliche UMDH Option ist die -l Option. Dies führt dazu, dass die Datei- und Zeilennummern gedruckt werden soll die CallStack, wann immer möglich.

UMDH Ausgabe erläutert

Wenn Sie das Protokoll auf eine Datei (umgeleitetUmdh - p: PID-f:umdh.log), der Inhalt ist ähnlich dem folgenden, erhaltenen von einem laufenden Editor-Prozess:
UMDH: Logtime 2000-06-28 10:54 - Machine=MYMachine - PID=704
   *********** Heap 00270000 Information ********************
       Flags: 58000062
       Number Of Entries: 87
       Number Of Tags: <unknown>
       Bytes Allocated: 00008DF0
       Bytes Committed: 0000A000
       Total FreeSpace: 00001210
       Number of Virtual Address chunks used: 1
       Address Space Used: <unknown>
       Entry Overhead: 8
       Creator:  (Backtrace00007)
           ntdll!RtlDebugCreateHeap+0x00000196
           ntdll!RtlCreateHeap+0x0000023F
           ntdll!LdrpInitializeProcess+0x00000369
           ntdll!LdrpInitialize+0x0000028D
           ntdll!KiUserApcDispatcher+0x00000007
   *********** Heap 00270000 Hogs ********************
   000001A0 bytes in 0x4 allocations (@ 0x00000068) by: BackTrace00031
           ntdll!RtlDebugAllocateHeap+0x000000FB
           ntdll!RtlAllocateHeapSlowly+0x0000005B
           ntdll!RtlAllocateHeap+0x00000D81
           ntdll!LdrpAllocateDataTableEntry+0x00000039
           ntdll!LdrpMapDll+0x000002A4
           ntdll!LdrpLoadImportModule+0x0000010D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpLoadImportModule+0x0000011D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpLoadImportModule+0x0000011D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpInitializeProcess+0x000009DC
           ntdll!LdrpInitialize+0x0000028D
           ntdll!KiUserApcDispatcher+0x00000007

   000001A0 bytes in 0x4 allocations (@ 0x00000068) by: BackTrace00034
           ntdll!RtlDebugAllocateHeap+0x000000FB
           ntdll!RtlAllocateHeapSlowly+0x0000005B
           ntdll!RtlAllocateHeap+0x00000D81
           ntdll!LdrpAllocateDataTableEntry+0x00000039
           ntdll!LdrpMapDll+0x000002A4
           ntdll!LdrpLoadImportModule+0x0000010D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpLoadImportModule+0x0000011D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpLoadImportModule+0x0000011D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpLoadImportModule+0x0000011D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpInitializeProcess+0x000009DC
           ntdll!LdrpInitialize+0x0000028D
           ntdll!KiUserApcDispatcher+0x00000007
				
Das Protokoll enthält ein Speicherabbild des jeden Heap des Prozesses. In diesem Beispiel das Protokoll beginnt mit einem Heap an der Adresse 270000. Nach ein paar globale Leistungsindikatoren für der Heap enthält das Protokoll ein Speicherabbild in sinkenden sortierten Reihenfolge der Stack-traces für die meisten Zuweisungen verantwortlich sind. Wenn Sie die Dynamik vergleichen Speicher, zu verschiedenen Momente genutzt werden, können Sie entnehmen, was in aufgetreten ist die Prozess- und wenn Heap-Verwendung ein Leck ähnelt.

Probleme, die auftreten können, wenn Sie UMDH verwenden

Die häufigsten Fehler bei Verwendung von UMDH auftreten, weil Stapel Ablaufverfolgung ist nicht aktiviert. Darüber hinaus verhindert falsche Symbole für Ntdll.dll UMDH aus ausgeführt. Für die anderen Symboldateien UMDH ausgeführt wird, aber die Protokolldatei enthält stack Ablaufverfolgungen, die keinen Funktionsnamen, sondern müssen stattdessen relative Adressen innerhalb von Modulen. Ein entfernter Dritter Fehler ist eine falsche PID angeben. Die folgenden Fehlermeldung Ergebnisse, wenn Sie versuchen, UMDH für einen Prozess auszuführen, die keine Stack-Trace aktiviert:
C:\>Umdh - p: 1140 UMDH: Logtime 2000-06-28 12: 43 - Computer MeinComputer - PID = = 1140 verbinden.....Modul die Enumeration ist abgeschlossen. SymGetSymFromName (Prozess, Ntdll!RtlpStackTraceDataBase, Xxx) LastError fehlgeschlagen, 126 = UmdhGetAddrFromName Stack-Trace-DB konnte nicht gefunden werden. Zeiger (Ntdll!RtlpStackTraceDataBase). Ntdll.dll Symbole sind falsch. Wir nicht-Import-Symbole angezeigt werden.
Verwenden Sie den folgenden Befehl ein, um Überprüfen Sie die Einstellungen für den Prozess, den Sie untersuchen:
GFlags -i APPNAME
Verwenden Sie den folgenden Befehl ein, wenn Sie auf systemweite Stapel verlassen Ablaufverfolgung:
GFlags - r
Diese Befehle zeigt eine Liste von Flags, die für die Anwendung festgelegt. Beachten Sie, dass im Falle von systemweiten Stack-Trace, das Feature als angezeigt werden können aktive, aber wenn Sie keinen des Computers nach dem Ausführen Neustart der GFlags - R + ust Befehl nicht tatsächlich aktiviert ist. Wenn Sie wissen möchten, alle Anwendung, die Stack-Trace aktiviert hat, können Sie die USTEnabled-Taste anzeigen. unter dem folgenden Registrierungsschlüssel:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image Datei Ausführungsoptionen
Wenn Sie UMDH auf einen Prozess, Stack-Ablaufverfolgung aktiviert ist ausführen, hat, aber die Anwendung wurden nicht gestartet werden, da Sie die Flags festlegen, erhalten Sie möglicherweise die folgende Meldung in Ihren Protokollen:
Eine Stapelüberwachung wurde für diese Zuweisung nicht gespeichert (Index == 0)
Wenn Sie ausführen, setzen nicht die richtig, Symbolpfad die Symbole sind falsch, und Sie UMDH ausführen, können Sie erhalten Sie eine Fehlermeldung im Protokoll. Wird jedoch nur möglicherweise falsche oder irreführende zugehörigen Aufruflisten. Stellen Sie sicher, dass Sie die korrekten Symbole haben, starten Sie die NTSD-Systemdebugger für einen Prozess, zum Beispiel:
NTSD-Editor
Führen Sie dann den Debugger-Konsole den %LD aus, um die Symbolinformationen für das Modul zu laden und die LM Befehl zum Auflisten, welche Module ihre Symbole geladen haben. Wenn die der Ausgabe der LM Befehl zeigt die Exportsymbole geladen, die Symbole sind nicht gut. If Sie PDB-Symbole geladen haben, die Symbole sind gut. Sie erhalten möglicherweise die folgende Fehlermeldung-Wenn Sie die falsche PID angegeben:
C:\>Umdh - p: 1000-UMDH: Logtime 2000-06-28 09: 45 - Computer MeinComputer-= PID = 1000 verbinden... OpenProcess fehlgeschlagen, LastError = Meldungsnummer

Rufen Sie die UMDH von Visual Basic

Es kann manchmal auf eine Reihe von Protokollen im Laufe der Zeit dump nützlich sein Da das Leck möglicherweise nicht sehr auffällig auf den ersten Blick. Beispielsweise, wenn Sie vermuten Sie, dass die Active Server Pages (ASP)-Webanwendung ein Speicherverlust auftritt, Es kann hilfreich sein, eine COM-Komponente in Visual Basic schreiben, die mit Schalen aus UMDH. Sie können diese Komponente von Ihrer ASP-Seite aufrufen.

Die Im folgenden finden Sie einige Visual Basic-Code, der UMDH aufruft und erstellt eine Protokolldatei basiert auf der aktuellen Zeit:
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
      Public Function GetProcessID()
      GetProcessID = GetCurrentProcessId()
      End Function  
   .
   .
   .
      Dim strTime As String

      Dim sProcID As String
      sProcID = GetProcessID()
      strTime = "MYLOG_" & Format(Now(), "hhmm")
     
      Shell ("C:\UMDH\umdh -p:" & sProcID & " -f:d:\logs\" & strTime & ".txt")
				

Verwenden Sie UMDH mit Windows NT 4.0 Servicepack 6a (SP6a)

Das UMDH-Dienstprogramm, das mit der Debugtools für Windows enthalten ist Windows-Produkte funktioniert nicht unter Windows NT 4.0. Eine selbstextrahierende ausführbare Datei (Umdhnt4tools.exe) in diesem Artikel enthalten ist, und enthält die folgenden Tools mit NT 4.0 verwendet werden:
  • Umdh_nt4.exe und "Dbghelp.dll"
    Hierbei handelt es sich um die Windows NT 4.0 SP6-Version des Dienstprogramms UMDH.
  • Dhcmp.exe
    Dieses Dienstprogramm wird zum Vergleichen von zwei UMDH Dumps, um zu bestimmen, in denen eine mögliche Memory leak auftritt.
Die folgende Datei ist auf der Microsoft Download Center zum Download zur Verfügung. Center:
Bild minimierenBild vergrößern
Download
Umdhnt4tools.exe jetzt downloaden
Datum der Freigabe: 28 August 2002

Weitere Informationen zum Herunterladen von Microsoft Support-Dateien finden Sie in folgendem Artikel der Microsoft Knowledge Base anzuzeigen:
119591 So erhalten Sie Microsoft Support-Dateien aus online-Dienste
Microsoft wird diese Datei auf Viren überprüft. Microsoft verwendet die aktuelle Virenerkennungssoftware, die verfügbar auf das Datum, das die Datei gebucht wurde. Die Datei wird auf sicheren Servern gespeichert, die nicht autorisierten Änderungen an der Datei verhindert. Umdh_nt4.exe und "Dbghelp.dll" in einem Ordner abgelegt und anschließend Legen sie zuerst in Ihrer PATH-Umgebungsvariablen. Verwenden Sie anstelle von Umdh_nt4.exe UMDH.

Auf einem Computer, auf der Windows NT 4.0 ausgeführt wird, müssen Sie verwenden "Gflags.exe" systemweite Stack-Trace festlegen. Zum Beispiel:
GFlags - r
Stellen Sie sicher, dass Sie Ihren Computer neu starten. Umdh_nt4-Stack-Trace funktioniert nicht auf Prozessbasis unter Windows NT Version 4.0. Es ist für festgelegt. das gesamte System.

UMDH_NT4 ist im Gegensatz zu UMDH, da dies nicht der Fall Vergleichen Sie die Protokolldateien. Sie können nicht z. B. Folgendes tun:
UMDH_NT4 dh1.log dh2.log > cmp12.txt
Sie müssen stattdessen das Dienstprogramm Dhcmp.exe verwenden, das mit enthalten ist in diesem Artikel. Der Befehl sieht etwa wie folgt:
DHCMP dh1.log dh2.log > cmp12.txt

Eigenschaften

Artikel-ID: 268343 - Geändert am: Mittwoch, 18. Mai 2011 - Version: 1.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows NT Server 4.0 Standard Edition
  • Microsoft Windows NT Workstation 4.0 Developer Edition
Keywords: 
kbdownload kbarttypeshowme kbfile kbgraphxlinkcritical kbhowto kbsample kbmt KB268343 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 268343
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com