不知道從什么時候開始,網(wǎng)上開始流傳一種說法,WS2008系統(tǒng)自帶緩存有Bug,然后可能導(dǎo)致服務(wù)器內(nèi)存耗盡而死機!然后網(wǎng)上就出了一些工具解決這些問題!
下面是來自微軟官方的資料,并已證實Windows2008系統(tǒng)確實存在該問題,但在Windows 7和Windows Server 2008r2版本中已經(jīng)得到更新,“可以解決已經(jīng)發(fā)現(xiàn)的問題”。
鏈接:https://support.microsoft.com/zh-cn/kb/976618
下面是微軟官方資料的一些中文解釋。
癥狀:
可用內(nèi)存是幾乎耗盡。
系統(tǒng)文件緩存耗用大量物理 RAM。
存在對磁盤持續(xù)且大量的緩存讀取請求。
原因:
在 Microsoft Windows 操作系統(tǒng)中的內(nèi)存管理使用基于請求的算法。如果任何進程請求,并使用大量內(nèi)存,進程的工作集 (在物理內(nèi)存中的內(nèi)存頁面數(shù)) 都會增大。如果這些請求持續(xù)且未加抑制,進程的工作集將會增長至占用所有的物理內(nèi)存。在此情況下,其他所有進程的工作集調(diào)出到硬盤。這種行為降低了應(yīng)用程序和服務(wù)的性能,因為內(nèi)存頁是連續(xù)寫入硬盤和從硬盤讀取的。
這種行為同樣適用于系統(tǒng)文件緩存的工作集。如果這些請求是連續(xù)的且不受控制的,則該進程的工作集將繼續(xù)增長,直到消耗盡所有物理內(nèi)存。在這種情況下,所有其他進程的工作集分頁到硬盤,被占用的物理內(nèi)存量不可用于其他進程。
在 32 位 Windows 操作系統(tǒng)版本早于 Windows Vista,系統(tǒng)文件緩存的工作集是有理論內(nèi)存限制為小于 1 千兆字節(jié) (GB)。
在 32 位版本的 Windows Vista 操作系統(tǒng),動態(tài)分配核心資源。
在 64 位版本的 Windows 操作系統(tǒng),虛擬地址范圍通常通常超過了物理大小。
解決方法:
若要變通解決此問題,請使用GetSystemFileCacheSize API 函數(shù)和SetSystemFileCacheSize API 函數(shù)來設(shè)置系統(tǒng)文件緩存的工作集的大小最大值或最小值。
Microsoft Windows 動態(tài)緩存服務(wù)是演示如何使用這些 Api 來將這一問題的影響降至最低的一種策略的示例服務(wù)。
安裝和使用 Microsoft 動態(tài)緩存服務(wù)不會排除對 Microsoft Windows 的支持。
在 Windows 7 和 Windows Server 2008 R2 操作系統(tǒng)的內(nèi)存管理算法已更新,可以解決許多早期Windows版本中發(fā)現(xiàn)的問題。
如何確定您的系統(tǒng)是否受影響?
若要確定您的系統(tǒng)是否受此問題,請安裝 SysInternals RamMap 工具。
微軟下載:http://technet.microsoft.com/en-us/sysinternals/ff700229
運行該工具時,選擇使用計數(shù)選項。這將顯示多個列,以顯示當(dāng)前模式的內(nèi)存使用情況。單擊Active列進行排序使用字節(jié)數(shù),并注意總使用量(Total)。如果排列在頂部的使用計數(shù)是”Metafile”,并使用了大部分可用的內(nèi)存?;蛘吣龅健卑Y狀”一節(jié)中描述的系統(tǒng)文件緩存問題??梢詫ζ溥M行如此驗證: 即通過使用性能監(jiān)視器監(jiān)視的Memory\System Cache Resident Bytes計數(shù)器并查看隨著時間的推移不斷增長的緩存用量。
如果在性能監(jiān)視器中的Memory\System Cache Resident Bytes計數(shù)器顯示一段時間的上升趨勢,計算機如圖三所示出現(xiàn)問題
這篇文章中的信息適用于:
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
結(jié)論:
1、Windows 2008自身緩存問題確實存在,但是2008 r2版本已有更新,可解決一部分問題,但是可能還會有未知問題;
2、使用微軟官方API可以控制緩存大小,以及查詢當(dāng)前緩存大小;只是不知道限制緩存大小會有什么后果;
3、Windows 2012沒這種問題;
4、這個問題可以算是微軟的Bug,但也需要有一些“不嚴(yán)謹(jǐn)?shù)某绦颉眮碛|發(fā),才會產(chǎn)生相應(yīng)癥狀,所以也不完全是微軟的問題;