本文提供了无法从系统分页池分配内存的问题的解决方法。
原始 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 条目关闭,并可能导致计算机连续重启。 对于此配置,请根据要求和可用资源仔细选择一个值。 4. 退出注册表编辑器。 5. 重启服务器,使更改生效。
Status
Microsoft已确认,在“适用于”部分中列出的Microsoft产品中存在问题。