共用方式為


使用 PoolMon 尋找核心模式記憶體流失

如果您懷疑有核心模式記憶體流失,您可以使用 PoolMon 工具來判斷與流失相關聯的集區標籤。

PoolMon (Poolmon.exe) 會依集區卷標名稱監視集區內存使用量。 此工具包含在 Windows 驅動程式套件 (WDK) 中。 如需詳細資訊,請參閱 PoolMon

GFlags 集區設定

某些 GFlags 設定,例如特殊集區,將會影響記憶體集區的使用方式。 如需詳細資訊,請參閱 GFlags設定特殊集區

使用 PoolMon

PoolMon 標頭會顯示分頁和非分頁集區位元組總數。 顯示集區用於每個集區標籤的資料列。 顯示會每隔幾秒鐘自動更新一次。 例如:

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 具有命令索引鍵,可根據各種準則排序輸出。 選取與每個命令相關聯的字母,以取得數據。 每個命令需要幾秒鐘的時間才能運作。

排序命令包括:

命令金鑰 作業
P 將顯示的標記限制為非分頁集區位元組、分頁集區位元組或兩者。 重複按下 P 會依該順序逐一查看每個選項。
B 依位元組使用量上限排序標籤。
M 依位元組配置上限排序標記。
T 依標籤標名稱依字母順序排序標記。
E 導致顯示包含底部分頁和非分頁總計。
A 依配置大小排序標籤。
F 依可用作業排序標籤。
S 依配置與釋放之間的差異來排序標記。
結束 PoolMon。

在 PoolMon 中顯示驅動程式名稱

您可以使用PoolMon /g 參數來顯示 Windows 元件的名稱,以及指派每個集區標籤的常用驅動程式。 如果您在使用特定標籤的配置中發現問題,這項功能可協助您識別違規的元件或驅動程式。

元件和驅動程式列在Mapped_Driver數據行中,顯示中最右邊的數據行。 Mapped_Driver數據行的數據來自 pooltag.txt,這是隨 WDK 一起安裝的檔案。

下列命令顯示使用 /g 參數來新增Mapped_Driver數據行。

poolmon /g "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\triage\pooltag.txt"

顯示特定集區

使用 /i 參數來顯示以特定字串開頭的集區標記,例如 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]

使用 PoolMon 公用程式來尋找記憶體流失

以下是使用 PoolMon 公用程式尋找記憶體流失的一種方法:

  1. 啟動PoolMon。

  2. 如果您已判斷非分頁集區中發生流失,請選取 P 一次。 如果您已判斷它發生在分頁集區中,請選取 [P] 兩次。 如果您不知道,請勿選取 P,因此會包含這兩種集區。

  3. 選取 B,依位元組使用量上限排序顯示。

  4. 開始測試。 從畫面複製輸出,例如擷取螢幕快照並儲存。

  5. 每隔半小時擷取新的螢幕快照。 藉由比較螢幕快照,判斷哪些標籤的位元組增加。

  6. 停止測試並等候數小時。 判斷這次釋出多少標記。

一般而言,在應用程式達到穩定的執行狀態之後,它會以相同的速率配置記憶體和釋放記憶體。 如果配置記憶體的速度比釋放記憶體快,其記憶體使用量會隨著時間成長。 這通常表示記憶體流失。

解決流失問題

判斷與流失相關聯的集區標籤之後,您可能只需要知道流失。 如果您需要判斷配置例程的特定實例造成流失,請參閱 使用核心調試程序尋找核心模式記憶體流失