前一段有客户反映Windows系统下不明内存占用越来越多,128GB物理内存的主机,启动完成后就有大约一半的内存被占用,导致留给应用的内存容量不够。
对于这类问题,我的习惯是先看任务管理器,下面随便找台笔记本做个模拟测试。
参考上图,这台测试机8GB的物理内存(实际可用容量7.7GB),已用4.8GB。接下来看看是哪些程序占用的。
切换到进程视图,内存占用排名前几位的都只有几十MB,从这里看加起来怎么也达不到4.8GB那么多?
我想起来早年经验中的可能性:
1、BIOS为硬件预留;
2、驱动程序锁定内存开销在这里也是体现不出来的。
有一次客户在主机上加装有第三方PCIe卡,Windows下相关的驱动好几个,加上若干应用软件等我不熟悉的东西。说实话,在以前我大多建议重装系统(或者先不动当前数据,另换个系统盘上去)看看,而就地分析的办法实际上也有。
我先是在网上找到了RamMap这个工具。初步分析结果如下图:
这下总算看到内存开销里的大头了——Driver Locked占据了大约2200多MB;Mapped File映射文件接近1600MB(其中Active比例倒不是很大)。
到这一步还是没有查到根因,Driver Locked里面具体是哪个驱动“捣的鬼”?我在国外网站上又查到一篇文章,该问题终于有了进展。
先安装Windows ADK中的Windows Performance Toolkit和Windows评估工具包。
然后运行Windows Assessment Console,并按照上图所述操作,界面显示如下:
这里“MemoryTest”是我输入的任务名称,主要是选择分析“Memory footprint”。
按照提示重启后得到测试结果,在上图界面中把右下方的滚动条往下拉。
我要寻找的细节终于出现了——在这里展开“DriveLockedSystemPages”,一共看到7个.sys驱动文件。本文中的截图只是一个模拟环境,下面我们拿dxgkrnl.sys文件举例,来介绍最后的分析步骤。
先搜索文件名,这些驱动文件应该都在C:\Windows\System32\drivers目录下。
查看驱动文件属性中的详细信息,就可以看到它的说明(用途)和来源(厂商)了。
希望对大家有帮助,以下是我的参考资料来源:
https://superuser.com/questions/1121714/driver-locked-memory-on-a-non-virtual-machine
作者:唐僧 huangliang
原文:企业存储技术
推荐阅读
欢迎关注企业存储技术极术专栏,欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。