首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >用poolmon定位内存泄漏

用poolmon定位内存泄漏

原创
作者头像
Windows技术交流
修改于 2025-09-28 18:31:45
修改于 2025-09-28 18:31:45
21.4K0
举报
文章被收录于专栏:Windows技术交流Windows技术交流

文档主要是演示下poolmon的命令用法,仅此而已,文档里贴的360那个示例仅仅是示例而已,我是故意选了360的模块占用,来展示命令的作用,仅此而已。

在更多内存泄露场景中,poolmon并不大能定位到根因。最好用的反而是排除法和对比法,性能对比,从原理上来讲,我一直是奉行这句要诀: 环境一致性[底层硬件/操作系统/软件/工作负载(请求量/包量等)],测试要尽量消除无关变量,如果没有正常环境做参考,那就排除法,从这2个主要维度分细节去对比排除。

代码语言:javascript
复制
平台侧:硬件配置差异、虚拟化差异、安全组差异
系统内部:winver内核版本、驱动版本、补丁、软件版本和关键文件md5值、服务列表、平台组件

poolmon集成在wdk里,需要运行wdksetup.exe进行安装,而windbg也需要运行wdksetup.exe进行安装,但是请注意wdksetup.exe不含Windows Performance Toolkit,不要搞混了。

先介绍如何安装poolmon,然后介绍怎么用

打开https://docs.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk

1、下载安装wdk

注意直接点步骤3里的链接下载wdksetup.exe

https://go.microsoft.com/fwlink/?linkid=2166289

运行wdksetup.exe下载安装文件到一个目录

下载完成后关闭界面

然后去下载完成的目录(留存安装文件是为了在多台机器部署,压缩后复制到其他机器就可以用,而不用再下载一次),找到这个目录里的wdksetup.exe运行安装

2、cd /d "poolmon的绝对路径目录"

poolmon.exe的位置C:\Program Files (x86)\Windows Kits\10\Tools\x64\poolmon.exe

cd /d "C:\Program Files (x86)\Windows Kits\10\Tools\x64"

3、执行poolmon命令

-n 是输出文件

-u或-b 是按Bytes倒序排列

-p -p 就是按2次p,即 First turns on nonpaged, second turns on paged

poolmon.exe -n c:\1.txt -u -p -p(按2次p,paged)

poolmon.exe -n c:\2.txt -u -p(按1次p,nonpaged)

poolmon -n c:\3.txt -u (混合)

用notepad++打开上面获取到的.txt(软件作者反华,软件本身挺好用,会对齐列),看Bytes排在前边的Tag(多试几个Tag)

4、注意上图第1条的Bytes一列是倒序的,看前几条的第一列Tag名称

5、执行cd /d "C:\Windows\System32\drivers"

findstr /m /l /s $tagname *.sys

对应到上图即

findstr /m /l /s MmSt *.sys

findstr /m /l /s Se *.sys

findstr /m /l /s FMfn *.sys

根据查到的关键词可以判定占用内存最多的是什么软件,我自己这个case中,主要是操作系统占用的

6、假如Bytes一列最大值对应的Tag名称是DRPI,那执行findstr /mls DRPI *.sys

说明DRPI这个高主要是360占用

参数/m /l /s可以合并成/mls

关于安装包的其他微软官方资料:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/other-wdk-downloads

代码语言:txt
复制
如果搜索词包含空格或特殊字符,建议使用 /c:"搜索词" 来明确一个单独的字面量模式;
/l 已经让它按字面量匹配,但 /c: 可以避免多词被拆分。

findstr /m /s /i /c:"AlIn" C:\Windows\System32\drivers\*.sys

/m:只输出匹配到的“文件名”,不显示匹配的具体行内容。
/l:把搜索关键字按“字面量”处理(Literal),不使用正则表达式。
/s:递归搜索当前目录及其所有子目录中的文件。
/i:大小写不敏感(Ignore case),例如 AlIn、alin、ALIN 都会匹配。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档