讓伺服器能充份發揮4G以上的記憶體

讓伺服器能充份發揮4G以上的記憶體

正常一般來說,很多人以為主機板把RAM插上去,系統就可以用了,也不用再去特別做什麼樣的設定,這個想法不全然正確,如果RAM只有4G以下(含4G)的話,那麼確實是插上去就可以用了,如果是4G以上,加上電腦是32位元的,那麼就必需要做一些設定與調整,才能使用到4G以上的記憶體空間.

 

在前段有提到,32位元的才要設定,64位元的就不用了,原因在於32位元預設最多可定址4GB(2^32)的記憶體空間,操作系統保留2G,另外2G給應用程式進行使用,而64位元可以存取的虛擬記憶體上限為16TB(2^40),雖然話說如此,但看的到不見得吃的到,還要再看作業系統本身的限定.

  32位元 64位元
Windows XP Pro 4GB 128GB
Windows 2003 Server Standard 4GB 32GB
Windows 2003 Server Enterprice 32GB 1TB
Windows 2003 Server Enterprice SP1 64GB 1TB
Windows 2003 Server DataCenter 64GB 1TB
Windows 2003 Server DataCenter SP1 128GB 1TB
Windows Visita 家用入門 4GB 8GB
Windows Visita 家用進階 4GB 16GB
Windows Visita 商用入門 4GB 128GB
Windows Visita 商用進階 4GB 128GB
Windows Visita 旗艦版 4GB 128GB

其它的作業系統,就自己去找看看了,未來的SP更新是否會提升上限,也不得而知,所以這是截至目前為此的資料. 本文的重點在於告訴大家怎麼去用4G以上的記憶體.

首先,BIOS一定要先抓到全部的記憶體,這有點廢話,但也是重點,BIOS抓不到,後續也都是白講,而BIOS抓不到要怎麼辦,那就看各家主機板的說明了.

再來就是OS Level的設定了,這有幾個參數設定是支援4G以上記憶體有關的,而這個設定值就是存在boot.ini裡面,打開此檔後可看到類似下列的資料.

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Enterprice" /noexecute=optout /fastdetect

這記憶體相關的參數就會是加在最後一行的地方

為了使作業系統能抓到4G以上的記憶體,我們會加一個參數/PAE,這個參數就能使作業系統正確的抓到4G以上的記憶體,所以上述的boot loader最後一行就會長的跟下面這行一樣 :

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Enterprice" /noexecute=optout /fastdetect /PAE

那作業系統已經抓到記憶體了,就可以正常使用了嗎? 答案是還沒,可以發現到,記憶體用量不管怎麼用,總是只會用到4G,並不會超過4G,所以總是會有記憶體"剩"下來,這時就要加上/AWE這個參數,這個參數能使應用程式使用超過2-3G的記憶體使用,所以加上這個參數後,就可以充份使用4G以上的記憶體了.

不過,在這有個小插曲,這是來自本身的一個經驗,曾經在一台SQL Server上,做了同樣的一個設定,雖然記憶體是用到4G以上了,但是會跳出錯誤訊息,[應用程式正常初始 (0xc0000142)失敗。請按一下[確定]終止應用程式. 如果把/AWE的參數移除後,就又不會跳這個訊息了,找了一段時間,結果是要曾加一個設定Lock Pages in Memory. 參考MSDN Lock Pages in Memory

原來,系統的預設值是沒有開啟的,所以就必需手動的去將此功能給開啟.

1. 從系統管理工具裡找到本機安全性原則

2. 左邊的樹狀路徑為 本機原則-使用者權利指派

3. 在右邊的視窗找 [鎖定記憶體分頁]

4. 在該項按右鍵內容

5. 按[新增使用者或群組]的Button,把執行sqlserver.exe的帳號加進去.

這樣就能把Lock Pages in Memory的功能開啟囉,而之前的錯誤訊息就沒有出現了.

其它還有一些記憶體的參數可以使用,例如/3GB,在這個參數沒有下之前,系統是預設2G給操作系統,2G給應用程式,如果下了/3GB後,就會是系統1G,應用程式3G,那如果是4G以上,這個3GB會是怎麼分配記憶體呢?還是一樣,系統只會用到1GB,剩下的給應用程式,所以不是總記憶體除以3或是應用程式只用到3G,而這個參數在使用時,也有一些要注意的地方,當記憶體超過16G時,就不可使用此參數,因為16G以上時,系統需要2G的記憶體空間,如果只給1G,那就會出問題了,所以切記,當記憶體有16G以上時,不要加上/3GB.

另外還有一個參數/USERVA=XXXX與/3GB相似,不過它是使用者可以自行設定,這部份可以參考MSDN的說明 KB316739

 

作業系統的設完了,基本上,這記憶體已能被應用程式充份使用,除了應用程式本身的設定限制外,例如SQL本身還可以設定記憶體用量及AWE的功能還可以再去設定限制,是都可以充份使用全部的記憶體了.

 

註 : boot.ini除了用檔案總管的方式找到它,用記事本開啟修改外,也可在[我的電腦]按右鍵內容,於[進階]的Tag內點取[啟動及修復]的[設定],就可以看到預設作業系統,按下編輯就可以直接修改了.

2

1

 

以上內容如有錯誤的地方,感謝指正~

 

其它參考網站 :

Sql Stuff

Windows Server 2003 和 Windows 2000 提供大型記憶體支援

Windows各版本支援最大記憶清單