主要メッセージの手引き

対処方法

Solaris ISM (Intimate Shared Memory) の設計と実装では、特定のプロセスにアタッチできる共用メモリセグメントの数を制限し、Lotus Note アプリケーションに ENOMEM 障害を起こします。

すべての共用メモリセグメントが、shmsys:share_page_table システムファイルで設定したシステム変数によって ISM モードでアタッチされるためにこの制限があります。

共用メモリーセグメントが ISM モードで割り当てられると、オペレーティングシステムは、全割り当てプロセス間でマップ情報が 1 つのコピーだけ共用されるように、共用メモリーセグメントを物理メモリーにロックし、仮想アドレスと物理アドレスのマッピングを調整します。このためには、セグメントの仮想開始アドレスには 16M バイト (16 進数で 0x1000000) = 16777216 バイトごとのアドレスの境界に位置している必要があります。

NULL アドレスを指定すると、システムが、どの仮想アドレスにセグメントを割り当てるかを決定します。システムはまた、0x3000000 だけ離れたアドレスを割り当てます (ただし、0x1000000 だけ離れたアドレスに割り当てるように指定されている場合は除きます)。

sun4d では、最高で 220 個までの 1M バイトの ISM セグメントを作成および割り当てられること、sun4m では、最高で 235 個までの 1M バイトの ISM セグメントを作成および割り当てられることがわかります (セグメントが 0x1000000 だけ離れるように指定した場合)。

ISM が制限の原因だとした場合、次のようにいくつかの対策があります。

第 1 に、制限によって Lotus Notes は合計 80M バイトの共用メモリーを割り当てられます。Lotus が推奨しているように、セグメントのサイズを 10M バイト にすると、これまで 80 個の 1M バイトセグメントが必要だったメモリー要求を、8 つの ISM セグメントで処理できます。ISM の制限に達せずに、800M バイトまでのメモリー要求を処理できます。

第 2 に、share_page_table (ISM) フラグをオフにする方法があります。こうすると、sun4m は、3000 個を超える 1M バイトのセグメントを作成できます。ここでの問題は、ISM は実は共用メモリーアクセスの性能を向上させていること (したがって、オフにすることは性能を低下させることを意味すること)、そしてユーザーが 2.5.1 へ移行する場合は 、ISM がこの種の共用メモリーの負荷に関して別の一連の問題に対処する必要がでてくることです。

第 3 に、Lotus が、Notes サーバーが割り当てアドレスを追跡し、0x1000000 境界アドレスで割り当てられるように Notes サーバーを変更する方法があります (システムのデフォルトでは、0x3000000 アドレス境界を使用します)。前述したように、sun4m では、これで Notes サーバーを 235 個のセグメントまで拡張できます。