Pages

2016-03-09

Win2008主機記憶體滿載(System File Cache)問題

機房有一台網頁資料庫Win2008 R2 SP1主機,因為是舊硬件局部升級,只裝載8GB記憶體,系統乾淨時運作約耗1GB RAM,架上網站及資料庫後,初始值是1.6GB左右。當時想省著用,系統8GB RAM應該夠用,但跑了幾天,發現系統操作呈現卡頓,叫出工作管理員(Task Manager)查看,系統記憶體使用量幾乎滿載,CPU使用率卻極低。我統計了所有的處理程序(Process)記憶體總量不到滿載值,又把最可能耗量的SQL Server及IIS服務都Restart,記憶體使用量仍滿載。

重開機只能短暫解決問題,因此我還是把矛頭指向吃RAM最多的SQL Server 2014,將其服務最大Max Memory由預設值(其值挺大的)手動設為4GB,仍沒解決問題。爬了一下Google網文指出,原來是系統檔案快取(System File Cache)耗盡實體體記憶體的問題。當運行服務程序(如SQL Server)需要大量記憶體,系統對應所配置Cache Size也會變大,在32-bit的系統最大不會超過2GB,但64-bit系統的定址會耗盡所有實體記憶體。

要立即解決記憶體耗盡的問題,可以下載「CacheSet」工具把目前的Cache值立刻減少,記憶體佔用量就陡降了,但它只是暫時性的方案。

CacheSet

Task Manager

微軟提出「Microsoft Windows Dynamic Cache Service」永久解決方案,讓你設定最大Cache Size並建立一個Dynamic Cache Service服務背景監控,當超過Cache最大值時自動進行限制。請閱讀ReadMe.docx檔案先安裝服務,並調整DynCache.reg檔中的MaxSystemCacheMBytes值(16進位表示),預設值是0x000 (90%),可設為0x19 = 25% (2GB Cache of 8GB)值,再重新啟動該服務。

image

以上Cache變動,也可透過CacheSet工具看到改變。另外,也順帶檢討了伺服器裏SQL及VM Machine等吃RAM大怪獸服務,若系統只有8GB RAM,最好手動約束其最大Memory使用量(總量之2/3 – 系統運作2GB),否則一旦記憶體滿載,什麼怪現象都可能產生。

No comments: