限制 Windows 10 中的分页池内存大小以防止驱动程序内存泄漏

限制 Windows 10 中的分页池内存大小以防止驱动程序内存泄漏

我想解决音频驱动程序导致的分页池内存泄漏问题。我想到了一个将分页池内存大小限制在合理范围内的想法。在 SysInternals 编写的《Windows Internals,第 1 部分》一书的第 363 页中,我发现了内存管理注册表项。然而,文章指出所描述的密钥(包括PagedPoolLimit)仅适用于 32 位操作系统。

还有其他方法可以在 64 位 Windows 10 中管理这个问题吗?或者也许这根本就是一个坏主意。

如果我误解了什么的话,以下是从书中摘录的: 书

这是 IBM 的一篇文章没有提到仅 32 位兼容性。

PS 以下是我的页面池内存泄漏在正常运行一周后的情况(我 100% 确定是音频驱动程序,因为我通过 WDK 的 PoolMon 和 Windows SDK 的 Windows Performance Analyzer 进行了故障排除,如简要所述这个答案以及 SysInternals 一书中的内容): 任务管理器 PoolMon

更新 在《Windows Internals》(第 7 版)第 384 页中,指出 64 位 Windows 10 的最大分页池大小为 15.5 TB。它解释了此大小的设置位置。但我不知道如何更改它(即更改为物理 RAM 的 5% 或 10%)。以下是书中的摘录:

在 Windows 8.x 和 Server 2012/R2 中,其中四个计算大小存储在内核变量中。其中三个显示为性能计数器,一个仅计算为性能计数器值。Windows 10 和 Server 2016 将全局变量移至名为 MiState 的全局内存管理结构 (MI_SYSTEM_INFORMATION) 中的字段中。其中包含一个名为 Vs(类型为 _MI_VISIBLE_STATE)的变量,此信息驻留在其中。全局变量 MiVisibleState 也指向该 Vs 成员。这些变量和计数器列于表 5-5 中。

书

答案1

我认为更好的应对策略是找到有问题的驱动程序并尝试找到解决方法。例如,制造商提供的较新版本的驱动程序也许可以解决问题。

要识别有问题的驱动程序,请参阅 PoolMonX。最新版本发布于 2017 年,但它仍可在 Windows 10 64 位上运行。

您可以单击 PoolMonX 中的某一列以按升序或降序排序。

在此处输入图片描述


有用的信息:

在文章中 内存性能信息 您会发现QuotaNonPagedPoolUsage这似乎是任何单个进程的非分页池配额。

在文章中 Win32_进程 您将找到以下信息:

配额非分页池使用情况

一个进程的非分页池使用配额量。

例子:

Get-CimInstance -ClassName Win32_Process | Select-Object -Property Handle, QuotaNonPagedPoolUsage

可能有一种方法可以QuotaNonPagedPoolUsage设置 AppleAudio.sys

注册表项中还有 和HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management 的值,但一些报告怀疑它们在 64 位 Windows 中的作用。NonPagedPoolQuotaNonPagedPoolSize

相关内容