Beispiel 9: Erkennen eines Poolspeicherverlusts
Im folgenden Beispiel wird GFlags verwendet, um das systemweite Flag "Pooltagging aktivieren" in der Registrierung festzulegen. Anschließend wird PoolMon (poolmon.exe) verwendet, ein Tool im Windows Driver Kit, um die Größe der Speicherpools anzuzeigen.
PoolMon überwacht die Bytes in den ausgelagerten und nicht ausgelagerten Arbeitsspeicherpools und sortiert sie nach Pooltag. Wenn Sie PoolMon regelmäßig ausführen, können Sie Pools identifizieren, die sich im Laufe der Zeit kontinuierlich erweitern. Dieses Muster weist häufig auf einen Speicherverlust hin.
Hinweis Die Pooltagging ist in Windows Server 2003 und höheren Versionen von Windows dauerhaft aktiviert. Auf diesen Systemen ist das Kontrollkästchen Pooltagging aktivieren im Dialogfeld Globale Flags abgeblendet, und Befehle zum Aktivieren oder Deaktivieren der Pooltagging schlagen fehl. Wenn die Pooltagging nicht aktiviert ist, schlägt PoolMon fehl und zeigt die folgende Meldung an: "Abfragepooltags Fehlgeschlagen c0000002".
So erkennen Sie einen Poolspeicherverlust
Um die Pooltagging für alle Prozesse in Versionen von Windows vor Windows Server 2003 zu aktivieren, legen Sie das systemweite Tagging-Flag Pool aktivieren in der Registrierung fest. Die folgende Befehlszeile verwendet die Flagkürzelmethode, aber Sie können das Flag anhand des Hexadezimalwerts identifizieren oder das Dialogfeld Globale Flags verwenden:
gflags /r +ptg
Starten Sie den Computer neu, um die Registrierungsänderung wirksam zu machen.
Führen Sie PoolMon regelmäßig mit dem folgenden Befehl aus. In diesem Befehl sortiert der Parameter /b die Pools in absteigender Größenreihenfolge.
poolmon /b
Als Antwort zeigt PoolMon Zuordnungen aus den Speicherpools in absteigender Größenreihenfolge an, einschließlich der Anzahl von Zuordnungsvorgängen und freien Vorgängen sowie der Menge des im Pool verbleibenden Arbeitsspeichers (in der Spalte Bytes).
Memory: 16224K Avail: 4564K PageFlts: 31 InRam Krnl: 684K P: 680K Commit: 24140K Limit: 24952K Peak: 24932K Pool N: 744K P: 2180K Tag Type Allocs Frees Diff Bytes Per Alloc ----------------------------------------------------------------------- CM Paged 1283 ( 0) 1002 ( 0) 281 1377312 ( 0) 4901 Strg Paged 10385 ( 10) 6658 ( 4) 3727 317952 ( 512) 85 Fat Paged 6662 ( 8) 4971 ( 6) 1691 174560 ( 128) 103 MmSt Paged 614 ( 0) 441 ( 0) 173 83456 ( 0) 482
Wenn der Wert in der Spalte Bytes für eine Zuordnung ohne offensichtlichen Grund kontinuierlich erweitert wird, kann es zu einem Speicherverlust in diesem Pool kommen.
Deaktivieren Sie das Flag Pooltagging aktivieren .
Die folgende Befehlszeile verwendet die Flagkürzelmethode, aber Sie können das Flag anhand des Hexadezimalwerts identifizieren oder das Dialogfeld Globale Flags verwenden:
gflags /r -ptg
Starten Sie Windows neu, um die Registrierungsänderung wirksam zu machen.
Hinweis Verwenden Sie das Anfügesymbol (>>), um die PoolMon-Ausgabe in eine Protokolldatei umzuleiten. Später können Sie die Protokolldatei auf Poolgrößentrends untersuchen. Beispiel:
poolmon.exe /b >> poolmon.log