在装有 8GB RAM 并运行 Windows 8.1 的 Spectre x360 笔记本电脑上,我注意到运行速度变得非常缓慢。在任务管理器中,我可以看到我使用了大量的 RAM(7GB/8GB),但仔细查看详细信息并按内存降序排序并没有发现罪魁祸首。
在网上查找后,我发现一个常见的问题是非分页池大小过大,其根本原因可能是驱动程序内存泄漏。果然,即使重新启动后,我的非分页池大小仍然是 3.2 GB。
在任务管理器->详细信息下,我尝试按 NP Pool 列排序,但最高项只有 200k。
不知所措之下,我决定尝试一个备受吹捧的解决方案:修改注册表,在关机时清除页面文件。打开 regedit 并
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
查找 ClearPageFileAtShutDown 并设置为 1。
完成此操作后,我重新启动了电脑,然后发现空闲时的 RAM 下降到了约 2GB。
有人能帮忙解释一下为什么这样做有效吗?
有没有办法可以排除原始问题,以便将其重新设置为 0?
答案1
首先,池妖查看哪个驱动程序导致高使用率。
安装Windows WDK,运行poolmon("C:\Program Files (x86)\Windows Kits\8.1\Tools\x64\poolmon.exe"
),按照P池类型对其进行排序,以便非分页位于顶部,并通过B字节来查看使用最多内存的标签。
现在查看哪个pooltag使用了最多的内存,如下所示:
现在打开 cmd 提示符,转到 C:\Windows\System32\Drivers(cd C:\Windows\System32\Drivers
)并运行findstr
命令以查看哪个驱动程序使用此标签:
现在查看文件属性,找到驱动程序版本并寻找更新。
如果pooltag仅显示Windows驱动程序或在pooltag.txt中列出("C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\triage\pooltag.txt"
)
你有用xperf 来追踪导致使用的原因. 安装Windows SDK 中的 WPT,打开以管理员身份运行 cmd.exe然后运行:
xperf -on PROC_THREAD+LOADER+POOL -stackwalk PoolAlloc+PoolFree+PoolAllocSession+PoolFreeSession -BufferSize 2048 -MaxFile 1024 -FileMode Circular && timeout -1 && xperf -d C:\pool.etl
捕获 30-60 秒的增长。使用 WPA.exe 打开 ETL,将池图添加到分析窗格。
将pooltag列放在第一位,并添加stack列。现在加载符号进入 WPA.exe 并展开您在 poolmon 中看到的标签堆栈。
现在找到您可以在堆栈中看到的其他第三方驱动程序。这里的Thre
标签(线程)由 G-Data 的 AVKCl.exe 使用。查找驱动程序/程序更新以修复它。