科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道AIX 上 Lotus Domino 的内存使用

AIX 上 Lotus Domino 的内存使用

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

了解 Lotus Domino 服务器的 IBM AIX 段布局以及如何配置 Notes.ini 文件设置 ConstrainedSHMSizeMB 和 PercentAvailSysResources 来调整服务器的内存分配。这里还提供了对服务器配置的建议。

来源:www.ibm.com 2007年9月15日

关键字: 技巧 Domino IBM lotus

  • 评论
  • 分享微博
  • 分享邮件

IBM AIX 平台处理内存的方式与 Lotus Domino 支持的所有其他平台都不一样。AIX 使用一个分段的体系结构,这种体系结构既有优点,也有缺点。主要的优点是性能提高了。缺点是,32 位的程序必须认识这种分段体系结构,才能充分利用 32 位地址空间。本文描述 AIX 平台上 32 位应用程序可能具有的段布局,以及 Lotus Domino 当前使用的布局。还将说明在使用不同的 Domino 内存选项时对布局的影响。

本文针对有经验的 Lotus Domino 系统管理员,他们应该熟悉 AIX 平台。

理解段布局

在默认情况下,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 中用于获得共享内存。


图 1. 虚拟地址空间示例
虚拟地址空间示例

使用 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 大内存模型。


图 2. AIX 大内存模型
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 非常大内存模型:第一种形式
AIX 非常大内存模型:第一种形式

第二种形式适用于进程堆大于 2.5 GB 的程序(见图 4),在这种形式中:

  • 第 1 段(0x0)用于内核文本和数据。
  • 第 2 段(0x1)用于用户文本。
  • 第 3 段(0x2)用于用户堆栈。但是,共享的库文本和数据也使用这个段(0x2)。
  • 如果使用动态段分配,那么第 4 段到第 16 段(0x3 到 0xF)供用户堆使用。
  • 如果动态段分配调用 shmat() 或 mmap(),那么 0xB 到 0xF 段供用户进程使用。


图 4. AIX 非常大内存模型:第二种形式
AIX 非常大内存模型:第二种形式

第三种形式适用于进程堆小于 256 MB 的程序(见图 5)。在这种形式中:

  • 第 1 段(0x0)用于内核文本和数据。
  • 第 2 段(0x1)用于用户文本。
  • 第 3 段(0x2)用于用户堆栈和数据。但是,共享的库文本和数据也可能存储在这个段中。
  • 如果动态段分配调用 shmat() 或 mmap(),那么其余的段(0x3 到 0xF)供用户进程使用。


图 5. AIX 非常大内存模型:第三种形式
AIX 非常大内存模型:第三种形式




回页首


Lotus Domino 内存控制选项

既然已经了解了关于 AIX 内存模型的一些基本信息,我们就来研究一下 Lotus Domino 使用的模型,以及 Domino 内存控制选项如何影响虚拟地址空间。

本文的余下部分讲解如何通过配置 Domino 服务器的 Notes.ini 文件中的设置来改变段布局。在开始之前,先提供一些说明,帮助您更好地理解表格中的信息。

  • 程序名。 这是一个典型的 Domino 应用程序示例。
  • 内核文本和数据。 此内存是共享的。
  • 用户文本。 此内存由具有相同可执行文件的所有程序共享(例如,在三个 update 任务之间共享一块内存。)
  • 用户堆栈。 这个段是每个进程专用的。
  • 进程堆。 这个段是每个进程专用的。
  • 共享的内存。 这个段由所有 Domino 进程共享。
  • 共享的库文本。 这个段由系统上的所有进程共享。
  • 不可用的段。 Lotus Domino 当前不能使用这个段。
  • 共享的库数据。 这个段是每个进程专用的。
  • 非 Domino。 这个段由第三方应用程序共享和使用。

所有 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

这是共享内存的布局:

  • NSF Buffer Pool(UBM=3/8 shm) = 750 MB
  • 其他 Domino 共享内存 = 1250 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

这是共享内存的布局:

  • NSF Buffer Pool(UBM=3/8 shm) = 654 MB
  • 其他 Domino 共享内存 = 1099 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

这是共享内存的布局:

  • NSF Buffer Pool(UBM=3/8 shm) = 654 MB
  • 其他 Domino 共享内存 = 1099 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

这是共享内存的布局:

  • NSF Buffer Pool(UBM=3/8 shm) = 384 MB
  • 其他 Domino 共享内存 = 640 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(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 的结果。

程序名 内核文本/数据
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(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 设置。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章