1. 问题现象与背景分析
最近在Windows 11系统上遇到一个棘手问题——系统运行一段时间后内存占用异常升高,任务管理器显示"非分页缓冲池"持续增长且不释放。这种情况会导致系统逐渐变慢,最终可能引发程序崩溃或系统冻结。作为长期使用Windows系统的老用户,我决定彻底排查这个内存泄漏问题。
非分页缓冲池(Non-Paged Pool)是Windows内核使用的特殊内存区域,用于存储不能被交换到磁盘的关键数据结构。正常情况下,它的使用量应该保持相对稳定。但当驱动程序或系统组件存在内存泄漏时,这个数值会持续增长。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 诊断工具准备与初步排查
2.1 基础诊断工具
首先需要准备以下工具:
- 任务管理器(查看实时内存占用)
- 资源监视器(更详细的内存分析)
- PoolMon(微软官方内存池监视工具)
- WinDbg(高级内存分析工具)
2.2 初步排查步骤
-
打开任务管理器 → 性能选项卡 → 内存
- 观察"非分页缓冲池"数值是否持续增长
- 记录初始值和增长趋势
-
使用资源监视器深入分析:
- 打开resmon.exe
- 进入"内存"选项卡
- 查看"专用工作集"和"提交大小"排序
提示:如果发现某个进程的专用工作集异常高,可能就是问题源头。
3. 使用PoolMon进行深入分析
3.1 PoolMon安装与配置
PoolMon是Windows Driver Kit(WDK)中的工具,需要安装WDK或单独下载:
- 从微软官网下载WDK
- 安装后找到poolmon.exe(通常在C:\Program Files (x86)\Windows Kits\10\Tools\x64)
- 以管理员身份运行cmd,切换到工具目录
3.2 PoolMon基本用法
运行命令:
code复制poolmon -b -p
参数说明:
- -b:按字节排序
- -p:显示分页和非分页池
输出列解读:
- Tag:内存分配标签(4字符标识)
- Type:P=分页池,N=非分页池
- Bytes:当前分配大小
- Allocs:分配次数
- Frees:释放次数
3.3 分析可疑标签
重点关注:
- 持续增长的N类型标签
