Freigeben über


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

  1. 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 
    
  2. Starten Sie den Computer neu, um die Registrierungsänderung wirksam zu machen.

  3. 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.

  4. 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 
    
  5. 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