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