PoolMon是定位Win11非分页缓冲池内存泄漏的唯一有效工具,需以管理员身份运行poolmon /g,按S键按Allocs-Frees差值降序、B键按Bytes降序锁定高危Tag,再通过Driver列或findstr/driverquery查证对应驱动并停用验证。

当你发现Win11内存占用持续飙升、任务管理器里进程加起来远不够“账面数字”,且“性能”→“内存”页底部显示【非分页缓冲池】已突破3GB甚至逼近10GB,说明内核级内存泄漏已经发生——PoolMon就是此刻唯一能揪出真实元凶的命令行工具。
确认非分页池异常并启动PoolMon
打开任务管理器→“性能”选项卡→点击“内存”,向下滚动到右下角区域,记下“非分页缓冲池”数值;若该值超过2GB且随时间稳定增长,立即进入下一步。
以管理员身份运行CMD或PowerShell:在开始菜单搜索“cmd”,右键选择“以管理员身份运行”;输入poolmon /g后回车——/g参数必须加上,否则PoolMon默认不显示驱动名,你将无法关联标签到具体驱动文件。
若提示“不是内部或外部命令”,说明WDK未安装或poolmon.exe不在系统PATH中。此时需前往C:\Program Files (x86)\Windows Kits\10\Tools\x64\(路径依WDK版本可能为11或对应年份)找到poolmon.exe,用cd命令切换至该目录后再执行。
动态排序锁定可疑Tag
PoolMon窗口启动后,会自动每3秒刷新一次数据。初始界面按Tag字母顺序排列,完全看不出问题——你需要主动干预排序逻辑。
按下键盘S键:按Allocs-Frees差值(即“只申请不释放”的净增长量)降序排列,这是定位泄漏最直接的指标;持续按S可循环刷新,观察哪一行的“Diff”列数值在明显增大。
再按B键:切换为按“Bytes”列降序,聚焦当前占用物理内存最多的Top 5标签;若某标签Bytes高达数百万字节且Diff同步激增,基本可判定为泄漏源。
注意:不要一上来就按M(最大分配数)或F(最多释放数),这两项反映的是高频操作行为,而非泄漏特征;真正危险的是“高Bytes + 高Diff”的组合。
查证Tag对应驱动名称
方法一:PoolMon内置驱动映射
确保你启动时用了poolmon /g,此时窗口右侧会多出一列“Driver”,直接显示分配该Tag的驱动模块名(如Npcap.sys、dxgkrnl.sys、WdFilter.sys)。若看到陌生或老旧驱动名(如Realtek、ASUS、Logitech相关),立即标记。
方法二:手动反查Tag字符串
若/g模式下Driver列为空白或显示“Unknown”,说明该Tag未被WDK符号库收录。此时记下4字符Tag(如Ntfs、Ndis、LspT),打开PowerShell(管理员),执行:
findstr /s /i "Ntfs" C:\Windows\System32\drivers\*.sys
该命令会在所有驱动文件中搜索包含该Tag字符串的二进制内容,通常能定位到对应.sys文件。
方法三:用driverquery交叉验证
在CMD中执行driverquery /v | findstr /i "Ntfs",查看该Tag是否关联正在运行的驱动服务名及启动状态,确认其是否处于“Running”而非“Stopped”。
冻结泄漏并验证修复效果
第一步:停止可疑驱动服务
若Tag指向明确驱动(如Npcap.sys),在管理员PowerShell中执行:
net stop npf(Npcap对应服务名是npf)→ 观察PoolMon中对应Tag的Bytes是否停止增长甚至缓慢下降。
第二步:禁用驱动启动
执行:
sc config npf start= disabled → 重启后该驱动不再加载,Nonpaged Pool应维持在正常水平(通常
第三步:强制释放残留池(仅应急)
若系统已严重卡顿,可在管理员CMD中运行:
rammap.exe -e(需提前下载RAMMap并放于PATH)→ 此操作会清空Standby列表并间接促使部分可回收内核池释放,但不能解决根本泄漏,仅争取排查时间。

















