[转载]AIX 上 Lotus Domino 的内存使用
在默認情況下,AIX 上的 32 位虛擬地址空間由 16 個段組成,每個段 256 MB。對于使用默認段布局的任何應用程序,虛擬地址空間看起來像圖 1 這樣:
- 第 1 段(0x0)用于內核文本和數據。
- 第 2 段(0x1)用于用戶文本。
- 第 3 段(0x2)用于用戶堆棧和數據。
- 第 4 段到第 13 段(0x3 到 0xC)供用戶進程使用,如果調用 shmat() 或 mmap() 的話。
- 第 14 段(0xD)為共享的庫文本保留。
- 第 15 段(0xE)供用戶進程使用。
- 最后一段(0xF)用于每個進程共享的庫數據。
對于不熟悉圖 1 中使用的術語的讀者,下面給出其定義:
- 文本。?只讀和可執行的代碼。它可以有三種類型:內核代碼、用戶代碼和共享的庫代碼。
- 數據。?可讀/寫數據區域,可以有三種類型:內核數據、用戶數據和共享的庫數據。
注:?Shmat() 和 mmap() 在 Lotus Domino 中用于獲得共享內存。
使用 AIX 大內存模型的程序具有圖 2 所示的內存布局:
- 第 1 段(0x0)用于內核文本和數據。
- 第 2 段(0x1)用于用戶文本。
- 第 3 段(0x2)用于用戶堆棧和數據。
- 第 4 段到第 7 段(0x3 到 0x6)為進程堆保留。
- 第 8 段到第 13 段(0x7 到 0xC)供用戶進程使用,如果調用 shmat() 或 mmap() 的話。
- 第 14 段(0xD)為共享的庫文本保留。
- 第 15 段(0xE)供用戶進程使用。
- 最后一段(0xF)用于每個進程共享的庫數據。
Lotus Domino 的當前版本使用 AIX 大內存模型。
在 AIX 5L 版本 5.2 和更高版本中,有一個非常大的內存模型。我們希望 Lotus Domino 以后會使用這個模型,但是當前沒有使用。這個模型有三種形式:第一種形式適用于進程堆(用戶數據)小于 2.5 GB 并大于 256 MB 的程序(見圖 3)。這個模型看起來與默認的 AIX 段布局相似,但是如果使用動態段分配(DSA),那么第 4 段到第 8 段(0x3 到 0x7)供進程堆使用。另外,如果動態段分配調用 shmat() 或 mmap(),那么 0xA 到 0xE 段供用戶進程使用。
第二種形式適用于進程堆大于 2.5 GB 的程序(見圖 4),在這種形式中:
- 第 1 段(0x0)用于內核文本和數據。
- 第 2 段(0x1)用于用戶文本。
- 第 3 段(0x2)用于用戶堆棧。但是,共享的庫文本和數據也使用這個段(0x2)。
- 如果使用動態段分配,那么第 4 段到第 16 段(0x3 到 0xF)供用戶堆使用。
- 如果動態段分配調用 shmat() 或 mmap(),那么 0xB 到 0xF 段供用戶進程使用。
第三種形式適用于進程堆小于 256 MB 的程序(見圖 5)。在這種形式中:
- 第 1 段(0x0)用于內核文本和數據。
- 第 2 段(0x1)用于用戶文本。
- 第 3 段(0x2)用于用戶堆棧和數據。但是,共享的庫文本和數據也可能存儲在這個段中。
- 如果動態段分配調用 shmat() 或 mmap(),那么其余的段(0x3 到 0xF)供用戶進程使用。
?
| 
 | 
既然已經了解了關于 AIX 內存模型的一些基本信息,我們就來研究一下 Lotus Domino 使用的模型,以及 Domino 內存控制選項如何影響虛擬地址空間。
本文的余下部分講解如何通過配置 Domino 服務器的 Notes.ini 文件中的設置來改變段布局。在開始之前,先提供一些說明,幫助您更好地理解表格中的信息。
- 程序名。?這是一個典型的 Domino 應用程序示例。
- 內核文本和數據。?此內存是共享的。
- 用戶文本。?此內存由具有相同可執行文件的所有程序共享(例如,在三個 update 任務之間共享一塊內存。)
- 用戶堆棧。?這個段是每個進程專用的。
- 進程堆。?這個段是每個進程專用的。
- 共享的內存。?這個段由所有 Domino 進程共享。
- 共享的庫文本。?這個段由系統上的所有進程共享。
- 不可用的段。?Lotus Domino 當前不能使用這個段。
- 共享的庫數據。?這個段是每個進程專用的。
- 非 Domino。?這個段由第三方應用程序共享和使用。
所有 Domino 應用程序共享的程序共享數據從 256 MB 開始,并根據需要增加 256 MB 的段,直到到達最大空閑段數量。
第一個表顯示沒有啟用 Domino 內存設置時的結果。
| Server | 1 | 2 | 3 | 4 和 5 | 6 到 13 | 14 | 15 | 16 | 
| HTTP | 1 | 2 | 3 | 4 和 5 | 6 到 13 | 14 | 15 | 16 | 
| Update | 1 | 2 | 3 | 4 和 5 | 6 到 13 | 14 | 15 | 16 | 
| N/A | 1 | 2 | 3 | 4 和 5 | 6 到 13 | 14 | 15 | 16 | 
| 256 MB | 512 MB | 2048 MB | 0 MB | |||||
這是共享內存的布局:
- NSF Buffer Pool(UBM=3/8 shm) = 750 MB
- 其他 Domino 共享內存 = 1250 MB
Domino 服務器的 Notes.ini 文件中的 ConstrainedSHMSizeMB 設置對共享內存進行限制。使用這個設置有兩種方式。如果 ConstrainedSHMSizeMB=1,那么共享內存被限制為默認大小。在 AIX 中,默認大小是 2.25 GB。還可以以 MB 為單位為這個設置指定大小。例如,如果將這個設置修改為:
ConstrainedSHMSizeMB = 1744
那么會得到下表中列出的結果。
| Server | 1 | 2 | 3 | 4 和 5 | 6 到 12 | 13 | 14 | 15 | 16 | 
| HTTP | 1 | 2 | 3 | 4 和 5 | 6 到 12 | 13 | 14 | 15 | 16 | 
| Update | 1 | 2 | 3 | 4 和 5 | 6 到 12 | 13 | 14 | 15 | 16 | 
| N/A | 1 | 2 | 3 | 4 和 5 | 6 到 12 | 13 | 14 | 15 | 16 | 
| 256 MB | 512 MB | 1744 MB | 256 MB | ||||||
這是共享內存的布局:
- NSF Buffer Pool(UBM=3/8 shm) = 654 MB
- 其他 Domino 共享內存 = 1099 MB
如果在 Notes.ini 文件中配置 ConstrainedSHMSizeMB= 1744 并將 dataseg 設置為 3(數據段的數量),那么會得到下表中列出的結果。
| Server | 1 | 2 | 3 | 4 到 6 | 7 到 13 | 14 | 15 | 16 | 
| HTTP | 1 | 2 | 3 | 4 到 6 | 7 到 13 | 14 | 15 | 16 | 
| Update | 1 | 2 | 3 | 4 到 6 | 7 到 13 | 14 | 15 | 16 | 
| N/A | 1 | 2 | 3 | 4 到 6 | 7 到 13 | 14 | 15 | 16 | 
| 256 MB | 768 MB | 1744 MB | 0 MB | |||||
這是共享內存的布局:
- NSF Buffer Pool(UBM=3/8 shm) = 654 MB
- 其他 Domino 共享內存 = 1099 MB
在下表中,ConstrainedSHMSizeMB 設置為 1024 MB。
| Server | 1 | 2 | 3 | 4 和 5 | 6 到 9 | 10 到 13 | 14 | 15 | 16 | 
| HTTP | 1 | 2 | 3 | 4 和 5 | 6 到 9 | 10 到 13 | 14 | 15 | 16 | 
| Update | 1 | 2 | 3 | 4 和 5 | 6 到 9 | 10 到 13 | 14 | 15 | 16 | 
| N/A | 1 | 2 | 3 | 4 和 5 | 6 到 9 | 10 到 13 | 14 | 15 | 16 | 
| 256 MB | 512 MB | 1024 MB | 1024 MB | ||||||
這是共享內存的布局:
- NSF Buffer Pool(UBM=3/8 shm) = 384 MB
- 其他 Domino 共享內存 = 640 MB
Domino 服務器的 Notes.ini 文件中的 PercentAvailSysResources 設置允許控制服務器上的內存分配。這個設置的值從 2% 到 100%。在下表中,PercentAvailSysResources 設置為 25%,系統具有 4 GB 內存。換句話說,1 GB 內存分配給 Domino 服務器。
| Server | 1 | 2 | 3 | 4 和 5 | 6 到 13 | 14 | 15 | 16 | 
| HTTP | 1 | 2 | 3 | 4 和 5 | 6 到 13 | 14 | 15 | 16 | 
| Update | 1 | 2 | 3 | 4 和 5 | 6 到 13 | 14 | 15 | 16 | 
| N/A | 1 | 2 | 3 | 4 和 5 | 6 到 13 | 14 | 15 | 16 | 
| 256 MB | 512 MB | 2028 MB | 0 MB | |||||
這是共享內存的布局:
- NSF Buffer Pool(UBM=3/8 shm) = 384 MB
- 其他 Domino 共享內存 = 1664 MB
在這個配置中,NSF Buffer Pool 設置為 3/8 * (RAM * .25)。除了操作系統對段施加的限制之外,沒有定義對 Domino 共享內存增長的限制。
下一個表顯示在 Notes.ini 文件中設置 NSF_BUFFER_POOL_SIZE_MB= 512 和 PercentAvailSysResources=25 的結果。
| Server | 1 | 2 | 3 | 4 和 5 | 6 到 13 | 14 | 15 | 16 | 
| HTTP | 1 | 2 | 3 | 4 和 5 | 6 到 13 | 14 | 15 | 16 | 
| Update | 1 | 2 | 3 | 4 和 5 | 6 到 13 | 14 | 15 | 16 | 
| N/A | 1 | 2 | 3 | 4 和 5 | 6 到 13 | 14 | 15 | 16 | 
| 256 MB | 512 MB | 2028 MB | 0 MB | |||||
這是共享內存的布局:
- NSF Buffer Pool(UBM=3/8 shm) = 512 MB
- 其他 Domino 共享內存 = 1536 MB
在這個配置中,NSF Buffer Pool 是直接配置的,PercentAvailSysResources 被忽略。除了操作系統對段施加的限制之外,沒有定義對 Domino 共享內存增長的限制。
| 
 | 
我們建議不要以任何形式使用 ConstrainedSHMSizeMB。在當前使用的 AIX 大內存模型中,ConstrainedSHMSizeMB 應該只用來支持需要共享內存的第三方應用程序。如果使用它,那么 Lotus Domino 可用的虛擬地址空間就少了。這與 Domino 支持的其他平臺不一樣。在其他平臺上,使用 ConstrainedSHMSizeMB 減少共享內存,就會自動地增加應用程序的私有空間。
為了進行說明,現在舉一個例子:一臺 Domino 服務器正在運行非常沉重的 Lotus Domino Web Access HTTP 負載,它需要 1024 MB 的私有數據空間。在 AIX 上,在 Domino 程序目錄中使用 dataseg –f 4 *,從而讓所有 Domino 程序文件可以使用 4 個私有內存段。在其他平臺上,需要使用操作系統決定的虛擬地址空間大小。然后減去程序文本和共享的庫文本使用的空間。這會得到 Lotus Domino 可用的虛擬數據空間。在這個例子中,從 Lotus Domino 可用的虛擬數據空間中減去 1024 MB,并使用這個值配置 ConstrainedSHMSizeMB 設置。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的[转载]AIX 上 Lotus Domino 的内存使用的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 教你怎么修改个性开机画面
- 下一篇: HDOJ 1166 敌兵布阵
