Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Если вы подозреваете утечку памяти в режиме ядра, можно использовать средство PoolMon для определения тега пула, связанного с утечкой.
PoolMon (poolmon.exe) monitors pool memory usage by pool tag name. Это средство входит в комплект драйверов Windows (WDK). For more information, see PoolMon.
Параметры пула GFlags
Some GFlags settings such as Special Pool, can affect how memory pools are used. For more information, see GFlags and Configuring Special Pool.
Use PoolMon
Заголовок PoolMon отображает общее количество страничных и непагированных байтов пула. В столбцах показано использование пула для каждого тега пула. Отображение обновляется автоматически каждые несколько секунд. For example:
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 имеет ключи команд, которые сортируют выходные данные в соответствии с различными критериями. Чтобы изменить способ сортировки данных, выберите сочетание клавиш, связанное с определенной командой сортировки. Для каждой команды требуется несколько секунд, чтобы повлиять на отображение.
В следующей таблице перечислены доступные команды сортировки:
| Command key | Operation |
|---|---|
| P | Limit the tags shown to nonpaged pool bytes (P), paged pool bytes (P, P), or both (Enter). Repeatedly selecting P cycles through the options. |
| B | Сортировка тегов по максимальному использованию байтов. |
| M | Сортировка тегов по максимальному выделению байтов. |
| T | Сортировка тегов в алфавитном порядке по имени тега. |
| E | Отображение страничных и непагированных итогов в нижней части экрана. |
| A | Сортировка тегов по размеру выделения. |
| F | Сортировка тегов по бесплатным операциям. |
| S | Сортируйте теги по разнице между выделениями и освобождениями. |
| Q | Quit PoolMon. |
Отображение имен драйверов в PoolMon
Параметр PoolMon /g можно использовать для отображения имен компонентов Windows и часто используемых драйверов, назначающих каждый тег пула. При обнаружении проблемы в выделении с определенным тегом эта функция помогает определить компонент или драйвер.
The components and drivers are listed in the Mapped_Driver column, the right-most column in the display. The data for the Mapped_Driver column comes from the pooltag.txt file installed with the WDK.
The following command shows the use of the /g parameter to add the Mapped_Driver column:
poolmon /g "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\triage\pooltag.txt"
Отображение определенных пулов
/i Используйте параметр для отображения тегов пула, начинающихся с определенной строки.
The following command shows the use of the /i parameter to add the string Hid:
poolmon /iHid? /g "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\triage\pooltag.txt"
Отображение обновляется автоматически каждые несколько секунд. For example:
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]
Использование служебной программы PoolMon для поиска утечки памяти
В следующих шагах показано, как найти утечку памяти с помощью служебной программы PoolMon:
Start PoolMon.
Определите тип пула для проверки:
Nonpaged pool: If you know the leak occurs in a nonpaged pool, select P once.
Paged pool: If you know the leak occurs in a paged pool, select P, P.
Both pools: If you're unsure about the leak source, select Enter, so both pool types are included. Don't select P.
Select B to sort the display by Maximum byte use.
Запустите тест.
Скопируйте и сохраните выходные данные с экрана, например снимок экрана.
Каждые 30 минут скопируйте и сохраните текущие выходные данные в новый файл.
После создания нескольких выходных файлов сравните различия данных. Определите, какие байты тега увеличиваются.
Остановите тест и подождите несколько часов. Определите, насколько часть тега была освобождена за это время.
Как правило, после того, как приложение достигает стабильного состояния выполнения, оно выделяет память и свободную память с той же скоростью. Если он выделяет память быстрее, чем освобождает ее, его использование памяти растет со временем. Это поведение часто указывает на утечку памяти.
Устранение утечки
После определения тега пула, связанного с утечкой, может потребоваться все необходимые сведения об утечке. Если необходимо определить, какой конкретный экземпляр подпрограммы выделения вызывает утечку, см. раздел "Использование отладчика ядра" для поиска утечки памяти в режиме ядра.