zoukankan      html  css  js  c++  java
  • [转载]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 大内存模型

    在 AIX 5L 版本 5.2 和更高版本中,有一个非常大的内存模型。我们希望 Lotus Domino 以后会使用这个模型,但是当前没有使用。这个模型有三种形式:第一种形式适用于进程堆(用户数据)小于 2.5 GB 并大于 256 MB 的程序(见图 3)。这个模型看起来与默认的 AIX 段布局相似,但是如果使用动态段分配(DSA),那么第 4 段到第 8 段(0x3 到 0x7)供进程堆使用。另外,如果动态段分配调用 shmat() 或 mmap(),那么 0xA 到 0xE 段供用户进程使用。



    AIX 非常大内存模型:第一种形式

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

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



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

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

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



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




    回页首

    既然已经了解了关于 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

    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

    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 设置。

  • 相关阅读:
    jquery的ztree操作
    原创-使用pywinauto和swapy-ob-0.4.3进行dotnet的winform程序控制(二)
    原创-使用pywinauto进行dotnet的winform程序控制(一)
    javascript“命名空间”的费曼输出[原创]
    IIS7上传4M文件以上文件出现“Post大小超出允许的限制”错误解决方法
    OpenProj打开不了或者提示”Failed to load Java VM Library”的错误的解决方案
    项目管理中,开始到完成、完成到开始、开始到开始、和完成到完成的关系图解
    我的项目管理之干系人分析在单位项目中的运用
    关于学习js的Promise的心得体会
    vue.js与后台模板引擎“双花括号”冲突时的解决办法
  • 原文地址:https://www.cnblogs.com/hannover/p/2180321.html
Copyright © 2011-2022 走看看