你好,
在 Windows Server 2022 上运行 S2D + ReFS 时出现非分页池耗尽问题,微软已确认这是 ReFS 元数据缓存机制导致的内存泄漏风险。解决办法是应用最新的累积更新,并在注册表中启用 ReFS 的内存修剪参数来限制缓存占用。
在您的环境中,ReFS 的 allocate-on-write 元数据语义和块缓存逻辑会导致非分页池不断增长,最终引发主机死锁。微软在 KB4016173 中提供了可调节的注册表项,用于控制 ReFS 的延迟分配和缓存占用。这些键位于 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem 下,具体如下:
RefsEnableLargeWorkingSetTrim (REG_DWORD):默认值 0。设置为 1 时,ReFS 会在每次检查点尝试完整释放所有元数据流的映射,从而减少非分页池压力。
RefsNumberOfChunksToTrim (REG_DWORD):默认值 4。此值决定 ReFS 在遍历命名空间时修剪的粒度。数值越大,修剪越激进。建议在高负载虚拟化环境下提高此值,例如 8 或 16。
RefsDisableCachedPins (REG_DWORD):默认值 0。设置为 1 时,禁用 ReFS 的缓存 pin 机制,减少元数据缓存驻留时间。
修改方法:
打开注册表编辑器 (regedit.exe)。
导航至 HKLM\SYSTEM\CurrentControlSet\Control\FileSystem。
新建或修改上述键值。
重启服务器使配置生效。
请注意,这些参数不会互相冲突,可以组合使用。但在生产环境中修改前务必先测试,因为过度修剪可能会影响 I/O 性能。微软的最佳实践是同时保持系统更新到最新累积补丁,以确保 ReFS 驱动程序包含最新的内存管理修复。
如果您已经应用了最新的 Windows Server 2022 累积更新但问题仍然存在,建议收集 PoolMon 输出和内核内存转储,并提交给微软支持团队,因为这可能是尚未修复的 ReFS 内核泄漏。
我希望您在这里找到了一些有用的信息。如果这能帮助您更深入理解问题,欢迎接受此答案。如有更多问题,请随时留言。祝您生活愉快!
HP.