不知道从什么时候开始,网上开始流传一种说法,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 的支持。
在 Windows 7 和 Windows Server 2008 R2 操作系统的内存管理算法已更新,可以解决许多早期Windows版本中发现的问题。
如何确定您的系统是否受影响?
若要确定您的系统是否受此问题,请安装 SysInternals RamMap 工具。
微软下载:http://technet.microsoft.com/en-us/sysinternals/ff700229
运行该工具时,选择使用计数选项。这将显示多个列,以显示当前模式的内存使用情况。单击Active列进行排序使用字节数,并注意总使用量(Total)。如果排列在顶部的使用计数是”Metafile”,并使用了大部分可用的内存。或者您遇到”症状”一节中描述的系统文件缓存问题。可以对其进行如此验证: 即通过使用性能监视器监视的Memory\System Cache Resident Bytes计数器并查看随着时间的推移不断增长的缓存用量。
如果在性能监视器中的Memory\System Cache Resident Bytes计数器显示一段时间的上升趋势,计算机如图三所示出现问题
这篇文章中的信息适用于:
Microsoft Windows XP Professional x64 Edition
Windows Vista Home Basic
Windows Vista Home Premium
Windows Vista Business
Windows Vista Enterprise
Windows Vista Ultimate
Windows Vista Home Basic 64-bit edition
Windows Vista Home Premium 64-bit edition
Windows Vista Enterprise 64-bit edition
Windows Vista Ultimate 64-bit edition
Microsoft Windows Server 2003 R2 Datacenter Edition (64-Bit x86)
Microsoft Windows Server 2003 R2 Enterprise Edition (64-Bit x86)
Microsoft Windows Server 2003 R2 Standard Edition (64-Bit x86)
Microsoft Windows Server 2003, Datacenter x64 Edition
Microsoft Windows Server 2003, Enterprise x64 Edition
Microsoft Windows Server 2003, Standard x64 Edition
Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
Windows Server 2008 Datacenter without Hyper-V
Windows Server 2008 Enterprise without Hyper-V
Windows Server 2008 Standard without Hyper-V
Windows Server 2008 Datacenter
Windows Server 2008 Enterprise
Windows Server 2008 Standard
Windows Server 2008 for Itanium-Based Systems
Windows Server 2008 R2 Datacenter
Windows Server 2008 R2 Enterprise
Windows Server 2008 R2 Service Pack 1
Windows Server 2008 R2 Standard
结论:
1、Windows 2008自身缓存问题确实存在,但是2008 r2版本已有更新,可解决一部分问题,但是可能还会有未知问题;
2、使用微软官方API可以控制缓存大小,以及查询当前缓存大小;只是不知道限制缓存大小会有什么后果;
3、Windows 2012没这种问题;
4、这个问题可以算是微软的Bug,但也需要有一些“不严谨的程序”来触发,才会产生相应症状,所以也不完全是微软的问题;