文档主要是演示下poolmon的命令用法,仅此而已,文档里贴的360那个示例仅仅是示例而已,我是故意选了360的模块占用,来展示命令的作用,仅此而已。
在更多内存泄露场景中,poolmon并不大能定位到根因。最好用的反而是排除法和对比法,性能对比,从原理上来讲,我一直是奉行这句要诀: 环境一致性[底层硬件/操作系统/软件/工作负载(请求量/包量等)],测试要尽量消除无关变量,如果没有正常环境做参考,那就排除法,从这2个主要维度分细节去对比排除。
平台侧:硬件配置差异、虚拟化差异、安全组差异
系统内部: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
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。