本文へジャンプ

Lotus > Lotus Developer Domain > 
   
 

AIX での Lotus Domino のメモリー使用法

 
   
 
コンテンツ
セグメント・レイアウトを理解する
Lotus Domino のメモリー制御オプション
推奨事項
リソース
筆者について(原文のまま)

Eddy Bell, Software Engineer, IBM

レベル:初級
原文の掲載:2006年03月21日
更 新 日:2006年06月09日更新
原文はこちら (US)


Lotus Domino Server 用の IBM AIX セグメント・レイアウトと、Notes.ini ファイル設定の ConstrainedSHMSizeMB および PercentAvailSysResources によるサーバー・メモリー割り当ての変更方法を理解しましょう。また、サーバー設定に関する推奨事項についても説明します。


[編集者のメモ:この記事で使用したグラフは、元は IBM Redbook『AIX における C および C++ アプリケーションの開発および移植 (SG88-6713-00) (US)』(PDF 4.93MB)で公表されたものです。説明文中におけるメモリセグメントの表が間違って解釈される可能性があるため、補足記事を「AIX での Lotus Domino のメモリー使用法」に掲載していますので、あわせてご覧ください。]
PDFファイルを見るには Adobe® Reader® が必要です。

IBM AIX プラットフォームは、Lotus Domino をサポートする他のすべてのプラットフォームとは異なる方法でメモリーを扱います。AIX は、セグメント化されたアーキテクチャーを使用します。最大の長所は、強化されたパフォーマンスです。一方、短所としては、32 ビット・アドレス・スペースを最大限に活用するために、32 ビット・プログラムがセグメント化されたアーキテクチャーを認識しなければならない点が挙げられます。この記事では、AIX プラットフォームで可能な 32 ビット・アプリケーション用のセグメント・レイアウトと、現在 Lotus Domino が使用しているレイアウトについて解説します。また、異なる Domino メモリー・オプションを使用するときのセグメント・レイアウトの変化についても説明します。

この記事は、Lotus Domino のシステム管理者としての経験があり、AIX プラットフォームに習熟している方を対象として書かれています。


セグメント・レイアウトを理解する

デフォルトでは、AIX の 32 ビット仮想アドレス・スペースは、各 256 MB の 16 のセグメントで構成されています。デフォルトのセグメント・レイアウトを使用するすべてのアプリケーションでは、仮想アドレス・スペースは図 1 のようになっています。

  • 最初のセグメント (0x0) は、カーネル・テキストとデータ用に使用されます。
  • 2 番目のセグメント (0x1) は、ユーザー・テキスト用に使用されます。
  • 3 番目のセグメント (0x2) は、ユーザー・スタックとデータ用に使用されます。
  • 4 番目から 13 番目までのセグメント (0x3 〜 0xC) は、shmat() または mmap() のいずれかを呼び出した場合に、ユーザー・プロセス用に利用できます。
  • 14 番目のセグメント (0xD) は、共有ライブラリー・テキスト用に予約されています。
  • 15 番目のセグメント (0xE) は、ユーザー・プロセス用に使用されます。
  • 最後のセグメント (0xF) は、プリプロセス共有ライブラリー・データ用に使用されます。

図 1 で使用されている用語に慣れていない方のために、用語の定義を示しておきます。

  • テキスト:読み取り専用で実行可能なコード。カーネル・コード、ユーザー・コード、共有ライブラリー・コードのいずれかです。
  • データ:読み取り/書き込みデータ領域で、カーネル・データ、ユーザー・データ、共有ライブラリー・データのいずれかです。

メモ:共有メモリーを取得するために、Lotus Domino では Shmat() と mmap() が使用されます。

図 1. 仮想アドレス・スペースの例


AIX のラージ・メモリー・モデルを使用するプログラムは、図 2 に示されるメモリー・レイアウトを持ちます。
  • 最初のセグメント (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 5L バージョン 5.2 以降には、超ラージ・メモリー・モデルがあります。これは、将来の Lotus Domino で使用したいモデルですが、現在は使用されていません。このモデルには、3 つのフォームがあります。最初のフォームは、256 MB より大きく 2.5 GB 未満のプロセス・ヒープ (ユーザー・データ) を持つプログラム用です (図 3 参照)。このモデルはデフォルトの AIX セグメント・レイアウトに似ていますが、動的セグメント割り当て (DSA) が使用されている場合、4 番目から 8 番目までのセグメント (0x3 〜 0x7) をユーザー・ヒープに利用できます。また、動的セグメント割り当てによって shmat() または mmap() が呼び出される場合、0xA から 0xE までのセグメントをユーザー・プロセス用に利用できます。

図 3. AIX の超ラージ・メモリー・モデル: 最初のフォーム


2 番目のフォームは、図 4 に示すように、2.5 GB よりも大きなプロセス・ヒープを持つプログラム用です。セグメントの構成は次のようになります。

  • セグメント 1 (0x0) は、カーネル・テキストとデータ用に予約されています。
  • セグメント 2 (0x1) は、ユーザー・テキスト用に予約されています。
  • セグメント 3 (0x2) は、ユーザー・スタック用に使用されます。ただし、このセグメント (0x2) では、共有ライブラリー・テキストとデータも使用されます。
  • セグメント 4 から 16 まで (0x3 〜 0xF) は、動的セグメント割り当てによって使用された場合に、ユーザー・ヒープ用に利用できます。
  • セグメント 0xB から 0xF までは、動的セグメント割り当てによって shmat() または mmap() が呼び出された場合に、ユーザー・プロセス用に利用できます。

図 4. AIX の超ラージ・メモリー・モデル: 2 番目のフォーム


3 番目のフォームは、256 MB 未満のプロセス・ヒープを持つプログラム用です (図 5 参照)。このフォームでは、セグメント構成は次のようになります。
  • 最初のセグメント (0x0) は、カーネル・テキストとデータ用に使用されます。
  • 2 番目のセグメント (0x1) は、ユーザー・テキスト用に使用されます。
  • 3 番目のセグメント (0x2) は、ユーザー・スタックとデータ用に使用されます。ただし、このセグメントには、共有ライブラリー・テキストとデータが保存されることもあります。
  • 残りのセグメント (0x3 〜 0xF) は、動的セグメント割り当てによって shmat() または mmap() が呼び出された場合に、ユーザー・プロセス用に利用できます。

図 5. AIX の超ラージ・メモリー・モデル: 3 番目のフォーム



上に戻る

Lotus Domino のメモリー制御オプション

AIX メモリー・モデルに関する基本情報が明らかになったので、Lotus Domino が使用するモデルと、Domino のメモリー制御オプションによってどのように仮想アドレス・スペースが変更されるのかを見ていきましょう。

この記事の残りの部分では、Domino Server の Notes.ini ファイルを設定することにより、セグメント・レイアウトを変更する方法について解説します。先に進む前に、表に示された情報を理解するために役立つ凡例について説明します。

  • プログラム名:これは、一般的な Domino アプリケーションの例です。
  • カーネル・テキストとデータ:このメモリーは共有されています。
  • ユーザー・テキスト:このメモリーは、同じ実行ファイルを持つすべてのプログラムによって共有されています (たとえば、3 つの update タスクは、3 つのタスク間で共有されている共有メモリーの1 つのチャンクだけを使用します)。
  • ユーザー・スタック:このセグメントは各プロセスに固有です。
  • プロセス・ヒープ:このセグメントは各プロセスに固有です。
  • 共有メモリー:このセグメントは、すべての Domino プロセスによって共有されています。
  • 共有ライブラリー・テキスト:このセグメントは、システム上のすべてのプロセスによって共有されています。
  • 利用不可セグメント:現在、Lotus Domino はこのセグメントを利用できません。
  • 共有ライブラリー・データ:このセグメントは各プロセスに固有です。
  • Domino 以外:このセグメントは、サード・パーティー製アプリケーションによって共有および使用されます。

すべての Domino アプリケーションによって共有されるプログラム共有データは、256 MB から開始し、空きセグメントの最大数に達するまで、必要に応じて 256 MB のセグメント単位で増加します。

Domino メモリー設定を有効にしていないときの結果を最初の表に示します。

Program name kernel text/data
256 MB
User text
256 MB
User stack
256 MB
Process heap
512 MB
Shared memory
2 GB
Shared lib text Unavailable segment Shared lib data
Server 1 2 3 4 and 5 6 to 13 14 15 16
HTTP 1 2 3 4 and 5 6 to 13 14 15 16
Update 1 2 3 4 and 5 6 to 13 14 15 16
N/A 1 2 3 4 and 5 6 to 13 14 15 16
Process stack Process private data Domino shared memory Third-party API application shared memory
256 MB 512 MB 2048 MB 0 MB

共有メモリーのレイアウトは次のとおりです。

  • NSF バッファー・プール (UBM=3/8 shm) = 750 MB
  • 他の Domino 共有メモリー = 1250 MB

ConstrainedSHMSizeMB による設定

Domino Server の Notes.ini ファイルでの ConstrainedSHMSizeMB 設定は、共有メモリーを制限します。この設定の使い方には次の 2 とおりの方法があります。「ConstrainedSHMSizeMB=1」と設定すると、共有メモリーはデフォルトのサイズに制限されます。AIX では、デフォルトのサイズは 2.25 GB です。この設定では、サイズをメガバイト単位で指定することもできます。この記事では、この方法を使用しています。たとえば、次のように設定を変更します。

ConstrainedSHMSizeMB = 1744

この場合は、次の表に示す結果が得られます。

Program name kernel text/data
256 MB
User text
256 MB
User stack
256 MB
Process heap
512 MB
Shared memory
1.744 GB
Non-Domino
256 MB
Shared lib text Unavailable segment Shared lib data
Server 1 2 3 4 and 5 6 to 12 13 14 15 16
HTTP 1 2 3 4 and 5 6 to 12 13 14 15 16
Update 1 2 3 4 and 5 6 to 12 13 14 15 16
N/A 1 2 3 4 and 5 6 to 12 13 14 15 16
Process stack Process private data Domino shared memory Third-party API application shared memory
256 MB 512 MB 1744 MB 256 MB

共有メモリーのレイアウトは次のとおりです。

  • NSF バッファー・プール (UBM=3/8 shm) = 654 MB
  • 他の Domino 共有メモリー = 1099 MB

Notes.ini ファイルで「ConstrainedSHMSizeMB= 1744」と設定し、さらに使用されている dataseg を 3 (データ・セグメントの数) に設定すると、次の表に示す結果が得られます。

Program name kernel text/data
256 MB
User text
256 MB
User stack
256 MB
Process heap
768 MB
Non-Domino
1.744 GB
Shared lib text Unavailable segment Shared lib data
Server 1 2 3 4 to 6 7 to 13 14 15 16
HTTP 1 2 3 4 to 6 7 to 13 14 15 16
Update 1 2 3 4 to 6 7 to 13 14 15 16
N/A 1 2 3 4 to 6 7 to 13 14 15 16
Process stack Process private data Domino shared memory Third-party API application shared memory
256 MB 768 MB 1744 MB 0 MB

共有メモリーのレイアウトは次のとおりです。
  • NSF バッファー・プール (UBM=3/8 shm) = 654 MB
  • 他の Domino 共有メモリー = 1099 MB

次の表では、ConstrainedSHMSizeMB は 1024 MB に設定されています。

Program name kernel text/data
256 MB
User text
256 MB
User stack
256 MB
Process heap
512 MB
Shared memory
1024 MB
Non-Domino
1024 MB
Shared lib text Unavailable segment Shared lib data
Server 1 2 3 4 and 5 6 to 9 10 to 13 14 15 16
HTTP 1 2 3 4 and 5 6 to 9 10 to 13 14 15 16
Update 1 2 3 4 and 5 6 to 9 10 to 13 14 15 16
N/A 1 2 3 4 and 5 6 to 9 10 to 13 14 15 16
Process stack Process private data Domino shared memory Third-party API application shared memory
256 MB 512 MB 1024 MB 1024 MB

共有メモリーのレイアウトは次のとおりです。

  • NSF バッファー・プール (UBM=3/8 shm) = 384 MB
  • 他の Domino 共有メモリー = 640 MB

PercentAvailSysResources による設定

Domino Server の Notes.ini ファイルで PercentAvailSysResources を設定すると、サーバーでのメモリー割り当てを制御できます。この設定の値の範囲は、2 パーセントから 100 パーセントまでです。次の表では、4 GB のメモリーを持つシステムで PercentAvailSysResources が 25 パーセントに設定されています。言い換えると、Domino Server に 1 GB のメモリーが割り当てられていることになります。

Program name kernel text/data
256 MB
User text
256 MB
User stack
256 MB
Process heap
512 MB
Shared memory
2048 MB
Shared lib text Unavailable segment Shared lib data
Server 1 2 3 4 and 5 6 to 13 14 15 16
HTTP 1 2 3 4 and 5 6 to 13 14 15 16
Update 1 2 3 4 and 5 6 to 13 14 15 16
N/A 1 2 3 4 and 5 6 to 13 14 15 16
Process stack Process private data Domino shared memory Third-party API application shared memory
256 MB 512 MB 2028 MB 0 MB

共有メモリーのレイアウトは次のとおりです。

  • NSF バッファー・プール (UBM=3/8 shm) = 384 MB
  • 他の Domino 共有メモリー = 1664 MB

この設定では、NSF バッファー・プールの設定は 3/8 * (RAM * .25) を使用しています。オペレーティング・システムで設定されているセグメントの制限以外には、Domino 共有メモリーの増加の上限は定義されていません。

Notes.ini ファイルで NSF_BUFFER_POOL_SIZE_MB= 512PercentAvailSysResources=25 を設定したときの結果を次の表に示します。

Program name kernel text/data
256 MB
User text
256 MB
User stack
256 MB
Process heap
512 MB
Shared memory
2048 MB
Shared lib text Unavailable segment Shared lib data
Server 1 2 3 4 and 5 6 to 13 14 15 16
HTTP 1 2 3 4 and 5 6 to 13 14 15 16
Update 1 2 3 4 and 5 6 to 13 14 15 16
N/A 1 2 3 4 and 5 6 to 13 14 15 16
Process stack Process private data Domino shared memory Third-party API application shared memory
256 MB 512 MB 2028 MB 0 MB

共有メモリーのレイアウトは次のとおりです。

  • NSF バッファー・プール (UBM=3/8 shm) = 512 MB
  • 他の Domino 共有メモリー = 1536 MB

この設定では、NSF バッファー・プールの設定は直接行われ、PercentAvailSysResources は無視されます。オペレーティング・システムで設定されているセグメントの制限以外には、Domino 共有メモリーの増加の上限は定義されていません。


上に戻る

推奨事項

どの形式の ConstrainedSHMSizeMB も使用しないことを推奨します。現在使用されている AIX のラージ・メモリー・モデルでは、共有メモリーを必要とするサード・パーティー製アプリケーションをサポートする場合にのみ ConstrainedSHMSizeMB を使用してください。この設定を使用した場合、Lotus Domino が使用できる仮想アドレス・スペースが減少します。これが、Domino をサポートする他のすべてのプラットフォームとは異なる点です。他のプラットフォームでは、ConstrainedSHMSizeMB を使用して共有メモリーを減少させると、アプリケーション用のプライベート・データ・スペースの量が自動的に増加します。

例を用いてこれを説明しましょう。Domino Server は、1024 MB のプライベート・データ・スペースを必要とする非常に負荷の高い Lotus Domino Web Access HTTP を実行しているものとします。AIX では、Domino のプログラム・ディレクトリーで dataseg -f 4 * を使用することにより、すべての Domino プログラム・ファイルがプライベート・メモリーの 4 つのセグメントを使用できるようになります。他のプラットフォームでは、オペレーティング・システムで設定された仮想アドレス・スペースのサイズを使用する必要があります。次に、プログラム・テキストと共有ライブラリー・テキスト用に使用されるスペースを差し引きます。これにより、Lotus Domino が利用できる仮想データ・スペースの量が求められます。この例では、Lotus Domino が利用できる仮想データ・スペースから 1024 MB を差し引き、これを ConstrainedSHMSizeMB 設定に使用します。


上に戻る

リソース

学習する

製品、技術情報を入手する

ディスカッション
上に戻る

筆者について(原文のまま)

In 1994, Eddy Bell left Sun Microsystems, where he worked on PC emulation products 386i (roadrunner), SunPC, and WABI, and moved to Lotus. At Lotus, Eddy was the Project Architect/Leader for porting Lotus Notes/Domino from Windows to UNIX. He is currently the Platform/OS Services Architect for Lotus Domino.

上に戻る