Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Se si sospetta che si verifichi una perdita di memoria in modalità kernel, è possibile usare lo strumento PoolMon per determinare il tag del pool associato alla perdita.
PoolMon (Poolmon.exe) monitora l'utilizzo della memoria del pool in base al nome del tag del pool. Questo strumento è incluso in Windows Driver Kit (WDK). Per altre informazioni, vedere PoolMon.
Impostazioni del pool GFlags
Alcune impostazioni GFlags, ad esempio Pool speciale, influiscono sul modo in cui vengono usati i pool di memoria. Per altre informazioni, vedere GFlags e Configuring Special Pool.For more information, see GFlags and Configuring Special Pool.
Usare PoolMon
L'intestazione PoolMon visualizza i byte totali del pool di paging e non di paging. Le colonne mostrano l'uso del pool per ogni tag del pool. Lo schermo viene aggiornato automaticamente ogni pochi secondi. Per esempio:
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
PoolMon ha chiavi di comando che ordinano l'output in base a vari criteri. Selezionare la lettera associata a ogni comando per ricorrere ai dati. Il funzionamento di ogni comando richiede alcuni secondi.
I comandi di ordinamento includono:
Tasto di comando | Operazione |
---|---|
P | Limita i tag visualizzati a byte del pool non di paging, byte del pool di paging o a entrambi. Premendo ripetutamente P scorre ognuna di queste opzioni, in tale ordine. |
B | Ordina i tag in base all'utilizzo massimo dei byte. |
M | Ordina i tag in base alle allocazioni massime di byte. |
T | Ordina i tag in ordine alfabetico in base al nome del tag. |
E | Fa sì che la visualizzazione includa i totali paginati e non paginati nella parte inferiore. |
A | Ordina i tag in base alle dimensioni di allocazione. |
F | Ordina i tag in base alle operazioni gratuite. |
S | Ordina i tag in base alla differenza tra allocazioni e liberazioni. |
Q | Chiude PoolMon. |
Visualizzare i nomi dei driver in PoolMon
È possibile usare il parametro PoolMon /g per visualizzare i nomi dei componenti di Windows e i driver di uso comune che assegnano ogni tag del pool. Se si riscontra un problema nelle allocazioni con un tag specifico, questa funzionalità consente di identificare il componente o il driver che causa l'errore.
I componenti e i driver sono elencati nella colonna Mapped_Driver, la colonna più a destra nella visualizzazione. I dati per la colonna Mapped_Driver provengono da pooltag.txt, un file installato con WDK.
Il comando seguente illustra l'uso del parametro /g per aggiungere la colonna Mapped_Driver.
poolmon /g "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\triage\pooltag.txt"
Visualizza pool specifici
Usare il parametro /i per visualizzare i tag del pool che iniziano con una stringa specifica, ad esempio Hid.
poolmon /iHid? /g "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\triage\pooltag.txt"
Memory:33473120K Avail:20055132K PageFlts: 5 InRam Krnl:10444K P:1843072K
Commit:15035764K Limit:67027552K Peak:16677444K Pool N:1023400K P:1955448K
System pool information
Tag Type Allocs Frees Diff Bytes Per Alloc Mapped_Driver
HidC Paged 1667 ( 0) 1659 ( 0) 8 896 ( 0) 112 [hidclass.sys - HID Class d
HidC Nonp 17375 ( 0) 17256 ( 0) 119 19808 ( 0) 166 [hidclass.sys - HID Class d
HidP Nonp 1014 ( 0) 998 ( 0) 16 6704 ( 0) 419 [hidparse.sys - HID Parser]
Usare l'utilità PoolMon per trovare una perdita di memoria
Ecco un approccio per trovare una perdita di memoria con l'utilità PoolMon:
Avvia PoolMon.
Se hai stabilito che la perdita si verifica in un pool non paginato, seleziona P una volta. Se hai determinato che si verifica in un pool di paging, seleziona P due volte. Se non si conosce la risposta, non selezionare P, così sono inclusi entrambi i tipi di pool.
Selezionare B per ordinare la visualizzazione in base all'utilizzo massimo di byte.
Avviare il test. Copiare l'output dalla schermata, ad esempio prendendo uno screenshot e salvandolo.
Acquisire un nuovo screenshot ogni mezz'ora. Confrontando gli screenshot, determinare quali byte del tag stanno aumentando.
Arrestare il test e attendere alcune ore. Determinare la quantità di tag liberata in questa fase.
In genere, dopo che un'applicazione raggiunge uno stato di esecuzione stabile, alloca memoria e libera memoria alla stessa velocità. Se alloca memoria più velocemente di quanto lo libera, l'uso della memoria aumenta nel tempo. Questo spesso indica una perdita di memoria.
Risolvere la perdita
Dopo aver determinato quale tag del pool è associato alla perdita, potresti avere tutte le informazioni necessarie sulla perdita. Se è necessario determinare quale istanza specifica della routine di allocazione causa la perdita, vedere Uso del debugger del kernel per trovare perdite di memoria in modalità kernel.