Windows Server 2008 R2服務器內存使用率過高,但與任務管理器中進程占用內存和不一致


系統環境:
Windows Server 2008 R2 + Sql Server 2008 R2
 
問題描述:
Windows Server 2008 R2系統內存占用率過大,而在任務管理器中各進程內存占用總和都遠不到此占用率。
相關現象:
1. 內存占用率90%以上
2. 任務管理器中所有進程內存和較低,遠不到90%,有二十多G的內存偏差
 
分析過程:
 
  1. 首先懷疑SQL Server內存占用,但是SQL Server設置了最大內存,且任務管理器中顯示的內存占比並沒有達到很高,排除此原因
  2. 用RamMap工具查看內存的詳細使用情況,發現圖元文件(Metafile)占用了二十多G的內存,應該與此有關
 
解決方法:利用RamMap的“清空系統工作集”功能,可以釋放內存。
 
圖元文件(Metafile):
     Metafile可以理解為系統緩存,Windows server 2008系統中,比如存在大量的文件拷貝等磁盤io操作,系統會自動將其緩存到內存中,這部分被占用的內存在任務管理器的中未體現出來的,所以用戶會認為系統的內存占用異常。同時,MetaFile默認是沒有限制的,所以系統會無限制占用內存。 但是對於Windows 2012之后,操作系統會自動限制系統緩存的上限從而避免物理內存的耗盡。
    看了圖元文件的解釋后,發現前兩天一直在做轉移文件的操作,幾百G的大量小文件在不同磁盤中轉移,從而導致內存占用過高,符合此解釋。至此,問題調查清楚。
 
如下, 是微軟官方Blog中介紹修改注冊表來限制動態緩存的方法:
Microsoft Windows Dynamic Cache的更新程序,用戶可以下載后添加到服務中,通過修改注冊表來限制動態緩存的最大值,比如設置上限為200M等,這樣系統就可以把作為緩存使用的內存設置了上限值。
具體設置步驟如下:
1. 解壓后根據不同系統版本中對應的DynCache.exe文件復制到C:\windows\system32中。
2. 以管理員身份打開命令提示符,執行如下命令添加服務:
      sc create DynCache binPath= %SystemRoot%\System32\DynCache.exe start= auto type= own DisplayName= "Dynamic Cache Service"
3. 回到DynCache文件夾,找到DynCache.reg的注冊表文件導入。
4. 打開注冊表,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DynCache\Parameters
5. 右側找到MaxSystemCacheMBytes,雙擊它,這里我們選擇“十進制”,在數值里輸入要限制最大的緩存數(單位是MB),輸入800就是限制緩存最大為800MB,輸入0為不限制。
6. 到服務中啟動DynCache服務。
注:下載的dyncache解壓出來是有多幾個版本可選的,請選擇retail amd64的版本,不要選擇ia64(ia64表示安騰的64位處理器版本)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM