Windows2008系统缓存耗尽导致服务器死机问题的解决办法

不知道从什么时候开始 , 网上开始流传一种说法 , WS2008系统自带缓存有Bug , 然后可能导致服务器内存耗尽而死机!然后网上就出了一些工具解决这些问题!
下面是来自微软官方的资料 , 并已证实Windows2008系统确实存在该问题 , 但在Windows 7和Windows Server 2008r2版本中已经得到更新 , “可以解决已经发现的问题” 。
链接:https://support.microsoft.com/zh-cn/kb/976618
下面是微软官方资料的一些中文解释 。

症状:

可用内存是几乎耗尽 。
系统文件缓存耗用大量物理 RAM 。
存在对磁盘持续且大量的缓存读取请求 。
原因:
在 Microsoft Windows 操作系统中的内存管理使用基于请求的算法 。如果任何进程请求 , 并使用大量内存 , 进程的工作集 (在物理内存中的内存页面数) 都会增大 。如果这些请求持续且未加抑制 , 进程的工作集将会增长至占用所有的物理内存 。在此情况下 , 其他所有进程的工作集调出到硬盘 。这种行为降低了应用程序和服务的性能 , 因为内存页是连续写入硬盘和从硬盘读取的 。
这种行为同样适用于系统文件缓存的工作集 。如果这些请求是连续的且不受控制的 , 则该进程的工作集将继续增长 , 直到消耗尽所有物理内存 。在这种情况下 , 所有其他进程的工作集分页到硬盘 , 被占用的物理内存量不可用于其他进程 。
在 32 位 Windows 操作系统版本早于 Windows Vista , 系统文件缓存的工作集是有理论内存限制为小于 1 千兆字节 (GB) 。
在 32 位版本的 Windows Vista 操作系统 , 动态分配核心资源 。
在 64 位版本的 Windows 操作系统 , 虚拟地址范围通常通常超过了物理大小 。
解决方法:
若要变通解决此问题 , 请使用GetSystemFileCacheSize API 函数和SetSystemFileCacheSize API 函数来设置系统文件缓存的工作集的大小最大值或最小值 。
Microsoft Windows 动态缓存服务是演示如何使用这些 Api 来将这一问题的影响降至最低的一种策略的示例服务 。
安装和使用 Microsoft 动态缓存服务不会排除对 Microsoft Windows 的支持 。
您可以从以下 Microsoft 网站获得服务和源的代码:
http://www.microsoft.com/downloa ... 39af&displaylang=en
自制Dynamic Cache Service下载 , 限制最大缓存500MB , 最小缓存100MB:

Windows2008系统缓存耗尽导致服务器死机问题的解决办法

文章插图
DynCache.rar
更多信息:
在 Windows 7 和 Windows Server 2008 R2 操作系统的内存管理算法已更新 , 可以解决许多早期Windows版本中发现的问题 。
如何确定您的系统是否受影响?
若要确定您的系统是否受此问题 , 请安装 SysInternals RamMap 工具 。
微软下载:http://technet.microsoft.com/en-us/sysinternals/ff700229
运行该工具时 , 选择使用计数选项 。这将显示多个列 , 以显示当前模式的内存使用情况 。单击Active列进行排序使用字节数 , 并注意总使用量(Total) 。如果排列在顶部的使用计数是”Metafile” , 并使用了大部分可用的内存 。或者您遇到”症状”一节中描述的系统文件缓存问题 。可以对其进行如此验证: 即通过使用性能监视器监视的MemorySystem Cache Resident Bytes计数器并查看随着时间的推移不断增长的缓存用量 。
图一:存在问题的 RamMap 示例 。
Windows2008系统缓存耗尽导致服务器死机问题的解决办法

文章插图
图二:正常的 RamMap 示例 。
Windows2008系统缓存耗尽导致服务器死机问题的解决办法

文章插图
如果在性能监视器中的MemorySystem Cache Resident Bytes计数器显示一段时间的上升趋势 , 计算机如图三所示出现问题 。

推荐阅读