操作系統 /3GB /PAE 參數詳解

問題描述:

在 Windows®32 位系統上,當Domino® 服務器負載很大或者運行很複雜的應用程序時,可能會由於佔用內存太多而意外宕機。具體的說,某個特定的進程佔用的內存可能會達到用戶地址空間的上限。在默認狀況下,Windows 32位系統上用戶地址空間是 2 GB。在 Domino 服務器負載過大時,進程佔用的內存可能很快就達到了上限。

原因:

所有的32位應用程序都有4GB的用戶地址空間上限,因爲32位地址最多可以映射4 GB的內存。不管增加多少物理內存,CPU或磁盤都無法克服這個限制。
在不同的操作系統上,如何將4 GB的地址空間分給用戶模式(也稱用戶地址空間)也有不同的規範。在Windows 32位操作系統上這樣進行地址空間的分配:默認情況下,用戶地址空間是2 GB,其餘的2 GB預留給操作系統內核。

隨着複雜的企業級應用對內存需求的增加,2GB的用戶地址空間很快就會被佔滿,導致錯誤或宕機。當多個企業級組件在一個進程中運行這種情況下,如 Domino,Oracle,和Java® ,更容易出現這種情況。根據需要,在這樣的環境裏,對於某些版本的 Windows 操作系統,可以修改 boot.ini 加入 /3GB 參數,從而將可提供給進程的用戶地址空間增加到3 GB。

/3GB 參數起什麼作用?
正如上文提到的那樣,在Windows 32位操作系統中,默認用戶地址空間大小是2 GB,其餘的2 GB預留給系統內核,總共是4 GB。實際上,你可以這樣認爲:所有的進程(在內核模式下執行時)都共享着相同的內核地址空間,大小爲2 GB。大多數情況下,用戶地址空間都是由每個進程獨立使用的,除非進程選擇分配可共享的內存空間。

在某些 Windows 32 位操作系統上,可以在 boot.ini 加入 /3GB 參數來改變虛擬地址空間默認的百分比。加入 /3GB 參數後,虛擬地址空間的劃分規則發生了改變,用戶地址空間增加至3 GB,內核地址空間減少至1 GB。這個參數沒有改變整體的虛擬地址空間大小(進程可尋址空間總共還只有4 GB),並且對於操作系統如何管理虛擬內存也不會有影響。/3GB 參數只是簡單的將每個進程的用戶地址空間和內核地址空間進行了重新分配。

下列兼容 /3GB 參數的Windows 32位操作系統版本信息,摘自微軟技術文檔“內存支持與Windows操作系統”:
支持 /3GB參數的Windows 32位操作系統版本
Windows NT 4.0 Enterprise Edition
Windows 2000 Advanced Server
Windows 2000 Datacenter Server
Windows 2003 Server
Windows 2003 Enterprise Server
Windows 2003 Datacenter Server
Windows XP Professional
當使用這個參數時,必須綜合考慮關於應用層(Domino)和內核層(操作系統)的一些潛在問題:
/3GB 參數會發揮一定作用;然而,即使啓用這個內核層面的設置,32位進程還是無法使用超過2 GB的用戶地址空間,除非編譯時加入了 /LARGEADDRESSAWARE 參數。在編譯32位可執行程序時必須指定這個參數。

如果系統內核配置了 /3GB 參數,而在編譯可執行程序(.exe)時又未使用Large Address Aware 選項,那麼每個進程可尋址的用戶地址空間上限依然是2GB。邏輯正好相反,這多出來的1 GB並沒有還給系統內核,而是在用戶地址空間中被標記成保留塊。這會引發一個問題,即:1 GB的虛擬地址空間就不再可用了。因此,僅當我們考慮對進程用 /LARGEADDRESSAWARE 參數進行編譯時方可使用/3GB 參數。不恰當的使用/3GB 參數非但不能解決什麼問題,反而會引起更多的問題。

從 Domino 7.0.1 開始,Domino 服務器可執行程序採用 Large Address Aware 參數進行編譯,使之可以利用多達3 GB的地址空間。從應用程序層面來看,能額外使用1 GB地址空間,這已經可以滿足要求。

內核層 - 應用層的因素不是我們唯一要考慮的問題。關於內核級的性能有更重要的因素。 當在 Windows 32 位操作系統中使用 /3GB 參數時,事實上,有1 GB內核地址空間被拿走,然後分給了用戶地址空間。這就意味着可用的內核地址空間減少了一半。

某些複雜的應用程序在其進程使用的地址空間之外可能還需要分配額外的空間,使用這個參數的問題在於系統內核必須縮減內存佔用,因爲可用空間只剩下1 GB。由於系統從引導後進入了/3GB 模式,這不僅會影響那些使用3 GB用戶地址空間的進程,而且內核地址空間是由所有的進程分享,還將會影響到系統內所有的進程。這可能會導致出現潛在的性能問題,特別是某些內核模式組件,如分頁池、未分頁池以及和系統頁表項(PTE)。

具體的說,使用/3GB 參數會將 Windows 2003 分頁池的最大值從470 MB減至200 MB以下。根據默認策略分頁池大小爲80%,那麼分頁池的平均大小在160MB左右,遠低於通常期望和預期的值。由於 Domino 服務器每打開一個 1 MB大小的數據庫就要消耗約 1 KB的分頁池。在最壞的情況下,Windows操作系統事件日誌裏會出現Event ID編號2020的記錄,Domino也會時常報告"Hardware/OS error (Insufficient system resources exist to complete the requested service)" “硬件/操作系統錯誤(系統資源不足以完成請求的服務)”。

此外,在 Windows 32 位操作系統上啓用 /3GB 參數時,Lotus Domino 性能測試結果顯示CPU佔用率上升了10%~15%(因爲受限內核增加了額外的空間開銷)。測試結果還顯示,啓用 /3GB 參數後,Domino 服務器在Windows2003 下的表現比在 Windows2000 下更好。

/USERVA 參數
Windows 2003 平臺上,還有一個額外的參數可以與 /3GB 參數一起使用,那就是 /userva 參數。你可以用 /userva 參數來調整分給用戶模式的地址空間,值(以MB計)允許設置的範圍是:2048 MB(2 GB)至 3072 MB(3 GB)。由於某些應用可能用不了 3 GB 空間,只分配 2.8 GB 就可以正常運行,就可以使用這個參數,允許 3 GB 空間中的剩餘部分返回給內核使用。內核可用空間的增加使得系統頁表項(PTE)的大小也得以增長。舉個例子,在boot.ini中加入下列,就可以分配 2800 MB (2.73 GB)給用戶地址空間,另外 1296 MB (1.26GB)給系統內核使用:

/3GB/Userva=2800

微軟通常建議您設置 /userva 參數的值在2900 MB和3030 MB之間。然而,性能測試結果表明,/userva=2800 時 Domino 服務器就可以正常運行。重申一下,僅在 Domino7 和更高版本中支持這一選項。要了解更多關於 /userva 參數的信息,請看以下這篇微軟技術文檔:http://support.microsoft.com/kb/316739

內存和地址空間大小

讓我們花些時間來強調一個重要因素。用戶和內核地址空間大小的分配不會改變系統安裝的物理內存總量。此外,物理內存和地址空間之間也不是一對一的關係。地址空間中已訪問的頁面既可以存在於物理內存中,也可以存在於頁面文件中;把這兩個數相加就是整體的虛擬內存佔用。

事實上,進程的用戶地址空間增加至3 GB並不意味着它就會佔用3 GB的物理內存。簡單地說,它只意味着允許操作系統分配3 GB的虛擬內存給這個進程。事實上還是由系統內核來決定哪些數據存入磁盤,哪些數據留在物理內存中。所以,在實踐中,進程佔用的用戶地址空間每次只佔用物理內存中有限的幾個頁面。

換句話說:進程不能提出使用多少物理內存的需求。這個決定權在內核,系統內核決定哪些數據留在物理內存中,哪些數據轉存到頁面文件。大多數情況下,從技術的角度看,進程並不知曉哪一部分數據會被寫入或轉出頁面文件。更簡單的概括,應用程序不區分物理內存和頁面文件。因此,我們不能直接地討論一個特定的應用需要多少物理內存,但只能討論理論上它會用多少虛擬內存。

誤解

你大概會想:“OK,如果我使用/3GB 參數,並且我有8GB的物理內存,應該是3GB的物理內存給 Domino 的分區#1,3GB的物理內存給 Domino 的分區#2,剩下的2GB 物理內存給內核,對嗎?”

這種想法是錯誤的。

避免將物理內存和地址空間扯上一對一的關係很重要。雖然這些概念彼此之間有聯繫,但他們不是同義詞。再說一遍,任何時候,單一進程大部分的用戶地址空間通常指向磁盤上的頁面,只有一小部分的地址空間指向物理內存。單一進程需要佔用多少物理內存不是預先計算好的;它依賴於進程和系統事件,最終是由運行時的內核來決定。要估算特定環境下物理內存佔用值的大小,唯一的方法就是通過模擬用戶負載(儘量模擬實際環境)來實現。

你也許會想:“如果我的物理內存低於2 GB,假設我用/3GB 參數的話,內核和 Domino 佔用多少物理內存?Domino佔用3/4,內核佔用1/4?”

再次強調,你不能把物理內存和用戶地址空間扯上直接關係。儘管你的物理內存少於2 GB,用戶地址空間還是3 GB不變(這裏假設啓用了/3GB 參數)。安裝的物理內存很少僅僅意味着內核可能會控制更頻繁的將地址空間寫入頁面文件。

以上段落的主要含義是,/3GB 參數是用於調整進程的地址空間、而非物理內存佔用的多少,內存不足現象反映的是地址空間有限制,而非物理內存佔用太多。

/PAE 參數
Windows 平臺上,默認情況下內核可以管理最大4GB的物理內存(這不包括頁面文件)。然而,在某些 Windows 版本,比如高級版的Windows 2000和2003中,管理員可以通過在boot.ini 文件中加入/PAE 參數來增加可以管理的物理內存上限。加入/PAE(物理地址擴展)參數允許內核識別並管理多達64 GB的物理內存。Windows 的不同版本能管理的物理內存上限也有差別,但不會超過64 GB。當然,爲了利用/PAE 參數,您需要選擇合適的,支持36位地址總線的內存控制器的硬件配置。

使用/PAE 參數設置不會影響32位應用可尋址的虛擬地址空間大小,僅會影響CPU及系統內核可管理的物理內存總量。

總結:

  • /3GB 影響每個進程的虛擬用戶地址空間
  • /PAE 影響操作系統可管理的物理內存總量

/PAE 參數影響 CPU 能夠尋址的物理內存總量。頁面文件的使用不會受這個參數的影響,因爲頁面文件是順序存放在磁盤上。未啓用/PAE 時,系統中所有進程加起來就可能會使用遠大於4 GB的虛擬內存,其中大部分佔用的是頁面文件,而只有部分佔用的是物理內存。操作系統內核原本可以管理全部的物理內存,並允許所有32 位應用程序累計使用遠超過4 GB的虛擬內存。換句話說,如果您要使用超過4 GB的虛擬內存(包括物理內存和頁面文件之和),您不必啓用/PAE 參數,只有在您要使用超過4 GB的物理內存時,才需要啓用/PAE 參數。

下表提供了各種版本Windows操作系統(啓用/PAE 後)支持的物理內存上限。以下信息摘自 MSDN 文章 Q283037 和 Q292934 :

32位版本的Windows 操作系統 啓用 /PAE 參數後支持的物理內存上限

32位版本的Windows 操作系統                   啓用 /PAE 參數後支持的物理內存上限
Windows XP Professional                            4G
Windows 2000 Server                                4G
Windows 2003 Server                                4G
Windows 2000 Advanced Server                       8G
Windows 2003 Enterprise Server                     32G
Windows 2000 Datacenter Server                     64G
Windows 2003 Datacenter Server                     64G
Windows 2000/2003 Datacenter Server (with /3GB)    16G

/3GB 和/PAE
同時啓用 /PAE 和/3GB 在某種程度上會製造衝突。爲了支持使用更多的物理內存,加入/PAE 參數後,內核佔用了更多空間。然而,當啓用/3GB 參數時,內核可用的地址空間反倒變少了。最終結果是處於內核對地址空間利用的考慮,如果同時啓用 /3GB 和 /PAE 參數,系統處理不了超過16 GB的物理內存。MSDN 網站一篇題爲“Large Memory Support is Available in Windows 2000”的文章(Q283037)中有下列描述:

需要3 GB內存的應用程序很可能佔用更多物理內存,而不是交換文件,從而提升能夠使用/3GB 參數的應用程序的性能。有一種例外情況,即當同時啓用/3GB 參數與/PAE 參數時,操作系統無法管理超過16 GB的物理內存。這是出於內核的虛擬內存空間考慮。也就是說,當在boot.ini加入/3GB 參數後,當系統安裝了超過16 Gb的物理內存時,超過16 GB的部分不會被操作系統使用。

IBM Lotus 關於/3GB 參數的建議
既然 Domino7 服務器是可以訪問大地址(Large Address Aware)的應用程序,並且看起來增加 Domino7 服務器的地址空間這種做法似乎很有吸引力,Lotus 支持部門並不建議您啓用/3GB 參數,除非您別無選擇。減少內核的地址空間可能會對性能帶來負面影響,其本質是竊取原本屬於系統內核的資源將其分配給用戶應用程序使用。因爲 Domino 6 應用程序不能夠訪問大地址,所以在Domino 6 上使用/3GB 參數是沒有任何效果的,僅僅是減少了內核的地址空間。
您可以通過下列方法避免服務器由於2 GB的限制而宕機:
1. 使用/3GB 參數:如上所述,這個方法是最不可行的,Lotus技術支持通常也不推薦用戶使用。如果您堅持使用這個選項,請考慮加入/userva=2800 參數。因爲它潛在的約束,強烈建議在應用於生產環境中之前,先在測試環境中對這個配置進行測試。

2. 優化內存:降低內存佔用,包括降低共享內存大小,減少線程數量,重新設計應用和代理。在一些用戶案例中,產品缺陷或錯誤配置可能導致內存佔用過高,超過預期,這種情況下必須採取一些措施來解決這個問題。在遇到內存佔用過高的問題時,建議您聯繫IBM Lotus技術支持中心尋求幫助。

3. 啓用 Domino 服務器分區:在未發現任何已知 Domino 產品缺陷,在配置修改或選項修改又沒有更多的選擇時,一個可行的方案是對 Domino 啓用多個分區,將用戶負載分散到不同的分區上。由於每個 Domino 分區都有各自的尋址空間集合,通過劃分多個分區並加載應用程序,可以爭取到更多虛擬內存供機動使用(假設 Domino 服務器不受硬件限制)。同樣,您也可以在VMWare虛擬機上啓用 Domino 分區來實現想要的目的。

4. 在 64 位的 Windows 2003上運行:另一個選擇是在 64 位的 Windows 操作系統上運行32 位的 Domino 服務器。這樣操作可以將內核的地址空間從分配給 32 位應用程序的地址空間移出,並移入一個獨立的 64 位地址空間。對於採用了 Large Address Aware 選項進行編譯的Domino 7 服務器,就可以佔用 32 位應用程序可用的用戶地址空間上限(即4 GB)。對於未採用Large Address Aware 選項進行編譯的Domino 6 服務器,缺省情況下仍然有2 GB的用戶地址空間限制。關於在 64 位的 Windows平臺運行32位應用程序,還有其他忠告,請參閱相關信息。

5. 運行 64 位版本的 Domino 應用程序:Domino 8 的64 位版本會徹底擺脫32 位版本受制於地址空間的局面,提供更大的地址空間。然而,出於對保持服務器穩定均衡運行的考慮,其他一些來自操作系統或 Domino 的限制仍然無法迴避。別忘了,在純 64 位環境中,您可能仍會遇到硬件資源的限制(理論上,單個64 位的進程仍然可能會耗盡系統中所有可用的物理內存)。關於Domino 8 64位版本的詳情,請參考以下信息:


相關的微軟信息
在64 位Windows 操作系統下,沒必要再使用/3GB 參數或/PAE 參數了,因爲在默認配置時,64位內核完全可以管理更大容量的物理內存。另外,如上所述,每個32位進程在用戶模式下幾乎都能使用多達4 GB的空間(假設應用程序按 Large Address Aware選項編譯)。

下表摘自微軟技術文檔#294418,略有改動,請查閱微軟題爲“Comparison of 32-bit and 64-bit memory architecture for 64-bit editions of Windows XP and Windows Server 2003”的文檔
操作系統 <wbr>/3GB <wbr> <wbr>/PAE <wbr>參數詳解
64位版本Windows XP和Windows Server 2003的32位和64位內存體系結構的比較
http://support.microsoft.com/kb/294418
Windows Server 2003和Windows 2000支持大容量內存
http://support.microsoft.com/kb/Q283037
怎樣使用/userva 參數和/3GB 參數來調整用戶模式下的空間值在2GB和3GB之間
http://support.microsoft.com/kb/316739
內存支持和Windows操作系統
http://support.microsoft.com/whdc/system/platform/server/PAE/PAEmem.mspx
Windows 2000 Datacenter Server不能定位大於16GB的內存
http://support.microsoft.com/kb/Q292934
在Windows Server 2003基礎系統上的Exchange Server 2003中使用/3GB 參數
http://support.microsoft.com/default.aspx?scid=kb;en-us;823440
在系統分頁池中不能分配內存
http://support.microsoft.com/kb/312362


微軟解釋:

https://msdn.microsoft.com/en-us/library/windows/desktop/bb613473(v=vs.85).aspx


原文地址 http://blog.sina.com.cn/s/blog_494f9a6b0102e2gc.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章