在計算機系統中,核心內存是專門分配給系統內核或驅動程序使用的內存空間,這部分內存對于系統的穩定運行至關重要,因此對其進行監控和管理是非常必要的,以Windows 2003服務器為例,如果存在核心內存泄漏問題,可能會導致Web服務器無法正常打開,同時HTTP錯誤日志中出現大量的Number_Connections_Refused錯誤。
這意味著用戶無法正常訪問網站,從而影響到業務的正常進行,為了解決核心內存泄漏問題,通常需要采取一定的措施,如優化程序代碼、升級驅動程序等,小編給大家帶來的是Poolmon,這是一款專為Windows操作系統設計的核心內存泄漏檢測工具,可以幫助用戶及時發現并解決核心內存泄漏問題,確保系統的穩定運行,歡迎有需要的用戶下載使用。
如果你的系統是Windows 2000或Windows XP系統,要先編輯注冊表使它支持啟用池標記功能windows 2003/vista/win7不需要,因為默認情況下池標記處于啟用狀態。
1、運行注冊表編輯器-(開始菜單--運行---輸入regedit)。
2、在注冊表中找到以下項:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager
3、記下 GlobalFlag 的值,或保存Session Manager項。
4、雙擊 GlobalFlag 值,在右窗格中。
5、將值更改為 0x00000400 十六進制。
注意當您將添加全局標志值 0x00000400 時,它只顯示最多為它添加后 0x400。一定要添加前導零的所有或某些 Poolmon 信息將不會顯示在輸出屏幕上。
6、重新啟動計算機。
然后運行Poolmon.exe,顯示完按P鍵,再按B鍵,使Bytes字段按大到小排序,這樣可以清楚的看到Bytes比較大的tag標記(比如:SpDN),如下圖所示
如果SpDN一直處于增長狀態,那么我們可以確定SpDN存在核心內存泄漏,可以通過findstr命令來定位占用SpDN的進程和驅動文件。
findstr /s /m /l "SpDN" c:\windows\system32\drivers\*.sys
通過一個一個排查,最后找到核心內存泄漏檢的元兇。
PooMon標頭顯示總分頁和非分頁池字節數。列顯示每個池標記的池用法。屏幕每隔幾秒鐘自動更新一次。例如:
PooMon具有根據各種條件對輸出進行排序的命令鍵。選擇與每個命今關聯的字母,以便處理數據。每個命今需要幾秒鐘才能正常了,
排序命令包括:
在PoolMon中顯示驅動程序名稱
可以使用PooMong參數顯示分配每個池標記的 Windows 件和常用驅動程序的名稱。如果在具有特定標記的分配中發現問題,此功能可幫助你識別有問題的組件或驅動程序。
組件和驅動程列在"Mapped Driver"列中,即顯示中最右側的列。Mapped Driver 列的數據來自 pooltag.xt,該文件隨 WDK 一起安裝以下命令演示如何使用 /g 參數添加Mapped Driver列。
poolmon /g "C:iProgram Files (x86)Windows Kits110Debuggerstx64triagelpooltaq.txt
顯示特定池
使用/ 參數顯示以特定字符串開頭的池標記,例如 Hid。
poolmon /iHid? /g "C:iProgram Files (x86)Windows Kits1101Debuggerslx64 triagelpooltag.txt'dbgcmd
下面是使用 PoolMon 實用工具查找內存泄漏的一種方法:
1、啟動PoolMon。
2、如果已確定泄漏發生在非分頁池中,請選擇 P 一次。如果已確定它發生在分頁池中,請選擇 兩次。如果不知道,請不要選擇P以便包括這兩種類型的池。
3、選擇 B可按最大字節使用量對顯示進行排序。
4、開始測試。從屏幕復制輸出,例如,拍攝屏幕截圖并保存.
5、每半小時拍攝一次新的屏暮截圖。通過比較屏慕截圖,確定哪些標記的字節正在增加。
6、停止測試并等待幾個小時。 確定此時釋放了多少標記
通常,在應用程序達到穩定運行狀態后,它會以相同的速率分配內存和可用內存。如果分配內存的速度比釋放內存快,則內存使用量會隨著時間的推移而增長。 這通常表示內存泄漏。
1、poolmon.exe無需安裝,打開即可使用,
2、poolmon.exe核心內存泄漏檢測工具檢測速度快,運行穩定。
網友評論