必须使用性能监视器添加Memory\Pool Paged Bytes和Memory\Pool Nonpaged Bytes计数器监控Windows内核池内存,任务管理器和资源监视器无法显示;结合poolmon.exe可定位泄漏驱动。
要实时监控 windows 服务器的内核池内存使用情况,必须通过性能监视器(perfmon.msc)添加特定的内存计数器——因为任务管理器和资源监视器均不显示内核池相关指标。
关键计数器:识别分页与非分页池
内核池分为“分页池”(Paged Pool)和“非分页池”(Nonpaged Pool),二者均由系统内核和驱动程序动态分配。监控它们需关注以下两个核心性能计数器:
- Paging File\% Usage —— 不适用,这是页面文件占用率,与内核池无关
- Memory\Pool Paged Bytes:当前已分配的分页池字节数
- Memory\Pool Nonpaged Bytes:当前已分配的非分页池字节数
- (可选)Memory\Pool Paged Peak 和 Memory\Pool Nonpaged Peak:历史峰值,用于判断是否曾超限
操作步骤:添加并观察计数器
打开性能监视器后按顺序执行:
- 按 Win + R 输入 perfmon,回车启动
- 左侧导航栏点击 性能监视器
- 右侧图表区右键 → 添加计数器
- 在“可用计数器”列表中展开 Memory,勾选:
- Pool Paged Bytes
- Pool Nonpaged Bytes
- 确认实例为 _Total(汇总所有CPU节点),点击 添加 → 确定
- 图表将实时绘制两条曲线,纵轴单位为字节;建议右键图表 → 属性 → 将Y轴改为“对数刻度”或手动设置最大值(如 500MB),便于观察趋势变化
判断是否存在异常
仅看绝对数值不够,需结合系统角色和运行时长综合评估:
- 非分页池持续 > 800 MB(x64 系统)且缓慢上升,尤其伴随 Event ID 2020 / 2019(系统日志中提示“服务器服务因非分页池耗尽而停止响应”),高度疑似驱动内存泄漏
- 分页池长期 > 1.5 GB 并持续增长,可能由某服务反复加载/卸载内核模块引起(如某些备份、杀毒或存储驱动)
- 若 Pool Nonpaged Bytes 曲线出现阶梯式跳变(每次升幅固定,如 64 KB 或 128 KB),往往对应某个驱动周期性分配固定大小缓冲区,需配合 poolmon.exe 进一步定位标签
补充建议:搭配使用 poolmon 定位源头
性能监视器只能告诉你“池快满了”,但无法指出是哪个驱动占的。此时应配合微软官方工具 poolmon.exe(含在 Windows SDK 或 WDK 中):
- 以管理员身份运行命令提示符,执行 poolmon -b(按字节数排序)
- 观察顶部几行的 Tag 列,记下高频占用的 4 字符标识(如 Leak、Drvr、FILE)
- 用 findstr /i "Tag" %SystemRoot%\System32\drivers\*.sys 反查驱动文件名
- 再结合 driverquery /v 查看该驱动的描述与厂商信息











