本文提供了无法从系统分页池分配内存的问题的解决方法。
原始 KB 数: 312362
现象
服务器负载过大时,服务器服务可能会在系统事件日志中重复记录以下错误。 它指示服务器已退出分页池内存:
源 - SRV
类型 - 错误
事件 ID - 2020
描述-服务器无法从系统分页池分配,因为池为空。
数据 -
0000:00040000 00540001 000000000 c00007e4
0010:00000000 c000009a 00000000000000
0020: 00000000 000000000 0000000b
原因
多种因素可能会耗尽分页池内存的供应。 启用池标记并采用 poolsnaps
不同的时间间隔可能有助于了解哪个驱动程序正在使用分页池内存。 poolsnaps
如果指示 MmSt 标记(Mm 节对象原型 PTE)是消耗最大的使用者和分页池内存,或者系统正在记录错误事件 2020 年代,则存在大量在服务器上打开的文件的可能性很大。 默认情况下,当系统达到总分页池的 80% 时,内存管理器会尝试剪裁已分配的分页池内存。 根据系统配置,计算机上的可能最大分页池内存可以为 343 MB,此数字的 80% 为 274 MB。 如果内存管理器无法快速修剪以满足需求,则可能会发生本文的“症状”部分中列出的事件。 通过优化内存管理器以更早地启动剪裁过程(例如,达到 60%)可以跟上突发高峰期的分页池需求,并避免耗尽分页池内存。
解决方法
重要
此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 作为额外保护措施,请在修改注册表之前先将其备份。 如果之后出现问题,您就可以还原注册表。 有关如何备份和还原注册表的详细信息,请单击下面的文章编号,查看相应的 Microsoft 知识库文章:
322756 如何备份和还原 Windows 中的注册表
以下优化建议有助于缓解问题:
启动注册表编辑器(Regedt32.exe)。
在注册表中,找到并单击以下注册表项:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management
在“编辑”菜单上,单击“添加值”,然后添加以下注册表值:
值名称:PoolUsageMaximum
数据类型:REG_DWORD
Radix:Decimal
值数据:60将值设置为 60 会通知内存管理器在 PagedPoolMax 的 60% 处启动修整过程,而不是默认设置 80%。 如果阈值 60% 不足以处理活动峰值,请将此设置减少到 50% 或 40%。
值名称:PagedPoolSize
数据类型:REG_DWORD
弧度:十六进制
值数据:0xFFFFFFFF将 PagedPoolSize 设置为0xFFFFFFFF分配最大分页池,而不是将其他资源分配给计算机。
注意
不建议在具有 64GB RAM 的基于 32 位的 Windows Server 2003 计算机上使用 0xFFFFFFFF PagedPoolSize 设置。 这可能会导致免费系统 PTE 条目关闭,并可能导致计算机连续重启。 对于此配置,请根据要求和可用资源仔细选择一个值。
退出注册表编辑器。
重启服务器,使更改生效。
Status
Microsoft已确认,在“适用于”部分中列出的Microsoft产品中存在问题。