我有一台全新的机器,内存为 128GB,只安装了 Win 7 64 位操作系统以及相关硬件驱动程序等。没有安装其他软件。它有一个三星 850 Pro EVO SSD 作为主硬盘,双 GTX980 为 SLI。当我启动计算机时,它使用 7GB 内存,只剩下 121GB 可用。我所有的其他机器在空闲时只使用大约 2-2.5GB 内存。
我需要这块内存来使用摄影测量软件处理大型(120GB)数据集,而不是为了让其他软件启动得更快(没有安装)????!!
我检查了任务管理器中所有正在运行的进程,发现加起来还不到 7GB。根本就不可能有 7GB 的软件需要加载到 RAM 中。我如何查看哪些程序正在使用这个 RAM,更重要的是阻止它使用 RAM?
添加了 rammap 的屏幕截图 - 大型非分页池分配。我该如何摆脱它
Poolmon 显示使用非池页面的内存不超过 30MB。poolmon 中没有 5GB 的非池页面。我推测没有内存泄漏。
还有其他想法吗?
答案1
驱动程序导致内存泄漏。查看非分页内核内存的高值。在您的例子中,该值超过 5.6 GB。您可以使用池妖查看哪个驱动程序导致高使用率。
安装Windows WDK,运行poolmon,按照池类型对其进行排序,P以便非分页位于顶部,并按照B字节数对其进行排序以查看使用最多内存的标签。转到安装WDK的文件夹运行poolmon,转到工具(或C:\ Program Files(x86)\ Windows Kits \ 8.1 \ Tools \ x64)并单击poolmon.exe。
现在查看哪个pooltag使用了最多的内存,如下所示:
现在打开 cmd 提示符并运行 findstr 命令。为此,打开 cmd 提示符并键入“cd C:\Windows\System32\drivers”以转到驱动程序目录(不带引号)。然后键入findstr /s __ *.*
,__
您在 poolmon 中看到的标签在哪里。
完成此操作后,查看哪个驱动程序使用了此标签:
现在,转到驱动程序文件夹 (C:\Windows\System32\drivers),然后右键单击有问题的驱动程序(intmsd.sys
如上图所示)。单击“属性”,转到“详细信息”选项卡以查找“产品名称”。查找该产品的更新。
如果找不到 pooltag 的驱动程序,请在 pooltag.txt 中查找该标签是否由 Windows 驱动程序使用。
在这里你需要使用以下方法捕获池使用量的增长性能测试。首先,你必须安装 Windows 性能工具包. 接下来打开 cmd 提示符 (cmd.exe)作为管理员然后运行:
xperf -on BASE+Pool -stackwalk PoolAlloc+PoolFree -buffersize 2048 -MaxFile 1024 -FileMode Circular && timeout -1 && xperf -d C:\trace_pool_alloc.etl
现在打开无线保护协议工具,加载调试符号并寻找你在 poomon 中看到的标签AIFO
(内部分配 外部释放)并扩展堆栈。从函数名称中,您可能知道发生了什么。
在此示例中,FILE
标签使用来自一个名为定位32它扫描硬盘并建立其搜索索引。