非分页缓冲池泄漏是内核级内存泄漏,表现为内存占用飙升但任务管理器无高占用进程;需用RAMMap定位高占用驱动(如nvlddmkm.sys),再用PoolMon通过Tag(如Nvld、AFD)精准溯源,最后针对性更新或禁用问题驱动。

电脑什么都没开,内存占用却突然飙到90%以上,任务管理器里找不到大内存进程,系统卡顿、响应迟缓甚至自动重启——这大概率不是软件吃内存,而是非分页缓冲池(Nonpaged Pool)被驱动程序悄悄占满,发生了内核级内存泄漏。
先确认是不是非分页缓冲池在作祟
打开任务管理器 → 切换到“性能”选项卡 → 点击左侧“内存” → 拉到右下角,找到“非分页缓冲池”数值。如果它超过1GB(8GB内存设备)或超过3GB(16GB设备),且持续缓慢上涨,【这就是泄漏的铁证】。此时总内存占用高,但所有进程加起来只占几百MB,说明问题出在内核驱动层,不是你能直接结束的任务。
别急着重启——重启只能清掉临时状态,泄漏根源还在,几小时后又会复现。
用RAMMap看清楚内存到底被谁锁死了
下载并以管理员身份运行 RAMMap(微软官方工具,无需安装)。
等待扫描完成 → 左侧导航栏点击“Use Counts” → 找到“Nonpaged Pool”行,右侧显示具体占用值(单位KB)。再点击“Drivers”标签页,按“NonPagedPool”列降序排列,一眼就能看到哪个驱动模块占用了最多非分页内存。
注意:这里显示的是驱动文件名(如 nvlddmkm.sys、dxgkrnl.sys、afd.sys),不是进程名。你看到的 nvlddmkm.sys 就是 NVIDIA 显卡驱动核心模块,dxgkrnl.sys 是 Windows 图形子系统驱动,afd.sys 则常与网络过滤驱动相关。
用PoolMon精准定位泄漏源头
PoolMon 不是独立软件,需从 Windows Driver Kit(WDK)中提取,但更简单的方法是:直接下载 微软开源仓库中的 poolmon.exe(已编译好,x64版),解压后以管理员身份运行。
启动后默认按“Allocs”排序,先按 P 键切换为按“Bytes”降序排列 → 再按 B 键启用“高亮最大值” → 观察顶部几行的“Tag”列(4字符标识符)和对应“Bytes”值。
记下占用最高的那个Tag(比如“Nvld”、“dxgk”、“AFD ”),然后在命令行中执行:poolmon -i > tags.txt 生成完整标签映射表;或者直接上网搜索该Tag(例如搜“poolmon Nvld tag”),绝大多数情况下能立刻关联到对应驱动——【Nvld = NVIDIA display driver,dxgk = Windows Display Graphics Kernel,AFD = Ancillary Function Driver for Winsock】。
若Tag为“Leak”,说明有驱动未正确释放内存,但未打标签,这时需结合RAMMap中Drivers页的排序结果交叉判断。
针对性清理与修复
方法一:显卡驱动问题(最常见)
使用 DDU 在安全模式下彻底卸载 NVIDIA/AMD/Intel 显卡驱动 → 重启 → 安装官网发布的“Studio Driver”或“版本号稳定”的Game Ready驱动(避开591.59、572.90等已知泄漏版本)。
方法二:网卡或虚拟化驱动异常
打开设备管理器 → 展开“网络适配器” → 右键禁用所有第三方网卡驱动(如Realtek RTL8168、Marvell AVASTAR),改用系统自带的“Microsoft Wi-Fi Direct Virtual Adapter”临时替代;
同时检查是否安装了 VMware Workstation、VirtualBox 或 Hyper-V 相关组件,临时关闭或卸载其配套驱动服务(如 vmxnet3、vmswitch、winhv.sys)。
方法三:强制释放非分页池(应急)
以管理员身份运行CMD → 执行:net stop wuauserv && net stop bits && net stop cryptsvc && net stop msiserver → 等待服务停止 → 再执行:ipconfig /release && ipconfig /renew → 最后执行:echo y | rundll32.exe advapi32.dll,ProcessIdleTasks。这组操作可触发部分驱动重置内存分配状态,【非永久解,仅缓解2–4小时】,必须配合前述驱动更新才能根治。


















