讓伺服器能充份發揮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內點取[啟動及修復]的[設定],就可以看到預設作業系統,按下編輯就可以直接修改了.
以上內容如有錯誤的地方,感謝指正~
其它參考網站 :
Windows Server 2003 和 Windows 2000 提供大型記憶體支援