扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
IBM AIX 平台处理内存的方式与 Lotus Domino 支持的所有其他平台都不一样。AIX 使用一个分段的体系结构,这种体系结构既有优点,也有缺点。主要的优点是性能提高了。缺点是,32 位的程序必须认识这种分段体系结构,才能充分利用 32 位地址空间。本文描述 AIX 平台上 32 位应用程序可能具有的段布局,以及 Lotus Domino 当前使用的布局。还将说明在使用不同的 Domino 内存选项时对布局的影响。
本文针对有经验的 Lotus Domino 系统管理员,他们应该熟悉 AIX 平台。
理解段布局
在默认情况下,AIX 上的 32 位虚拟地址空间由 16 个段组成,每个段 256 MB。对于使用默认段布局的任何应用程序,虚拟地址空间看起来像图 1 这样:
对于不熟悉图 1 中使用的术语的读者,下面给出其定义:
注: Shmat() 和 mmap() 在 Lotus Domino 中用于获得共享内存。
图 1. 虚拟地址空间示例
使用 AIX 大内存模型的程序具有图 2 所示的内存布局:
Lotus Domino 的当前版本使用 AIX 大内存模型。
图 2. AIX 大内存模型
在 AIX 5L 版本 5.2 和更高版本中,有一个非常大的内存模型。我们希望 Lotus Domino 以后会使用这个模型,但是当前没有使用。这个模型有三种形式:第一种形式适用于进程堆(用户数据)小于 2.5 GB 并大于 256 MB 的程序(见图 3)。这个模型看起来与默认的 AIX 段布局相似,但是如果使用动态段分配(DSA),那么第 4 段到第 8 段(0x3 到 0x7)供进程堆使用。另外,如果动态段分配调用 shmat() 或 mmap(),那么 0xA 到 0xE 段供用户进程使用。
图 3. AIX 非常大内存模型:第一种形式
第二种形式适用于进程堆大于 2.5 GB 的程序(见图 4),在这种形式中:
图 4. AIX 非常大内存模型:第二种形式
第三种形式适用于进程堆小于 256 MB 的程序(见图 5)。在这种形式中:
图 5. AIX 非常大内存模型:第三种形式
|
Lotus Domino 内存控制选项
既然已经了解了关于 AIX 内存模型的一些基本信息,我们就来研究一下 Lotus Domino 使用的模型,以及 Domino 内存控制选项如何影响虚拟地址空间。
本文的余下部分讲解如何通过配置 Domino 服务器的 Notes.ini 文件中的设置来改变段布局。在开始之前,先提供一些说明,帮助您更好地理解表格中的信息。
所有 Domino 应用程序共享的程序共享数据从 256 MB 开始,并根据需要增加 256 MB 的段,直到到达最大空闲段数量。
第一个表显示没有启用 Domino 内存设置时的结果。
程序名 | 内核文本/数据 256 MB |
用户文本 256 MB |
用户堆栈 256 MB |
进程堆 512 MB |
共享的内存 2 GB |
共享的库文本 | 不可用的段 | 共享的库数据 |
---|---|---|---|---|---|---|---|---|
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 |
进程堆栈 | 进程私有数据 | Domino 共享的内存 | 第三方 API 应用程序共享的内存 | |||||
256 MB | 512 MB | 2048 MB | 0 MB |
这是共享内存的布局:
配置 ConstrainedSHMSizeMB 设置
Domino 服务器的 Notes.ini 文件中的 ConstrainedSHMSizeMB 设置对共享内存进行限制。使用这个设置有两种方式。如果 ConstrainedSHMSizeMB=1,那么共享内存被限制为默认大小。在 AIX 中,默认大小是 2.25 GB。还可以以 MB 为单位为这个设置指定大小。例如,如果将这个设置修改为:
ConstrainedSHMSizeMB = 1744
那么会得到下表中列出的结果。
程序名 | 内核文本/数据 256 MB |
用户文本 256 MB |
用户堆栈 256 MB |
进程堆 512 MB |
共享的内存 1.744 GB |
非 Domino 256 MB |
共享的库文本 | 不可用的段 | 共享的库数据 |
---|---|---|---|---|---|---|---|---|---|
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 |
进程堆栈 | 进程私有数据 | Domino 共享的内存 | 第三方 API 应用程序共享的内存 | ||||||
256 MB | 512 MB | 1744 MB | 256 MB |
这是共享内存的布局:
如果在 Notes.ini 文件中配置 ConstrainedSHMSizeMB= 1744 并将 dataseg 设置为 3(数据段的数量),那么会得到下表中列出的结果。
程序名 | 内核文本/数据 256 MB |
用户文本 256 MB |
用户堆栈 256 MB |
进程堆 768 MB |
非 Domino 1.744 GB |
共享的库文本 | 不可用的段 | 共享的库数据 |
---|---|---|---|---|---|---|---|---|
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 |
进程堆栈 | 进程私有数据 | Domino 共享的内存 | 第三方 API 应用程序共享的内存 | |||||
256 MB | 768 MB | 1744 MB | 0 MB |
这是共享内存的布局:
在下表中,ConstrainedSHMSizeMB 设置为 1024 MB。
程序名 | 内核文本/数据 256 MB |
用户文本 256 MB |
用户堆栈 256 MB |
进程堆 512 MB |
共享的内存 1024 MB |
非 Domino 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 |
进程堆栈 | 进程私有数据 | Domino 共享的内存 | 第三方 API 应用程序共享的内存 | ||||||
256 MB | 512 MB | 1024 MB | 1024 MB |
这是共享内存的布局:
配置 PercentAvailSysResources 设置
Domino 服务器的 Notes.ini 文件中的 PercentAvailSysResources 设置允许控制服务器上的内存分配。这个设置的值从 2% 到 100%。在下表中,PercentAvailSysResources 设置为 25%,系统具有 4 GB 内存。换句话说,1 GB 内存分配给 Domino 服务器。
程序名 | 内核文本/数据 256 MB |
用户文本 256 MB |
用户堆栈 256 MB |
进程堆 512 MB |
共享的内存 2048 MB |
共享的库文本 | 不可用的段 | 共享的库数据 |
---|---|---|---|---|---|---|---|---|
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 |
进程堆栈 | 进程私有数据 | Domino 共享的内存 | 第三方 API 应用程序共享的内存 | |||||
256 MB | 512 MB | 2028 MB | 0 MB |
这是共享内存的布局:
在这个配置中,NSF Buffer Pool 设置为 3/8 * (RAM * .25)。除了操作系统对段施加的限制之外,没有定义对 Domino 共享内存增长的限制。
下一个表显示在 Notes.ini 文件中设置 NSF_BUFFER_POOL_SIZE_MB= 512 和 PercentAvailSysResources=25 的结果。
程序名 | 内核文本/数据 256 MB |
用户文本 256 MB |
用户堆栈 256 MB |
进程堆 512 MB |
共享的内存 2048 MB |
共享的库文本 | 不可用的段 | 共享的库数据 |
---|---|---|---|---|---|---|---|---|
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 |
进程堆栈 | 进程私有数据 | Domino 共享的内存 | 第三方 API 应用程序共享的内存 | |||||
256 MB | 512 MB | 2028 MB | 0 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 设置。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者