|
|
UNIX システムでの IPC 資源のコンフィギュレーション
以下の節では、UNIX システムでのプロセス間通信 (IPC) パラメータについて説明し、そのコンフィギュレーション方法のガイドラインを示します。
IPC 資源を制御するパラメータ・セット
UNIX 上の BEA Tuxedo システムでは、UNIX オペレーティング・システムの IPC 資源が使用されます。IPC 資源は、以下に示す 3 種類の調整可能なパラメータ・セットで制御されます。
調整可能なパラメータの接頭辞 |
制御内容 |
---|---|
|
共用メモリの容量 |
|
セマフォの数 |
|
メッセージ・キューとメッセージのサイズ |
これらのパラメータの設定値は、アプリケーションによって異なります。ほとんどの UNIX システムのデフォルト値は、BEA Tuxedo アプリケーションを実行するのに十分な大きさには設定されていません。
これらの IPC パラメータは UNIX システムのバージョンによって異なります。以降の節で説明する内容は一般的なものです。各プラットフォームに対応する正確なパラメータ名とデフォルト値、およびそれらの変更方法については、BEA Tuxedo 8.0 プラットフォーム・データ・シートを参照してください。パラメータを変更したら、標準の管理ツールを使用してカーネルを再度構築し、オペレーティング・システムを再起動する必要があります。プラットフォームの詳細については、オペレーティング・システムの管理者に問い合わせるか、「システム管理者ガイド」を参照してください。
BEA Tuxedo アプリケーションを分散化する場合は、そのアプリケーションに参加するすべての UNIX システムに必要最低限の IPC 資源を割り当てておく必要があります。
共用メモリ
BEA Tuxedo 環境では、共用メモリが掲示板とワークステーション・リスナ (WSL) プロセスおよび IIOP リスナ (ISL) プロセスの制御テーブルで使用されます。また、アプリケーションで使用される場合もあります。
以下の共用メモリ・パラメータを調整してください。
SHMMAX
バイト単位での共用メモリ・セグメントの最大サイズ。割り当てることのできる共用メモリ・セグメントの最大サイズです。ただし、プロセスでは SHMMAX
サイズのセグメントを複数使用できます。
SHMSEG
プロセスあたりの共用メモリ・セグメントの最大数。1 つのプロセスで使用できる最大共用メモリ・サイズ (バイト単位) は、SHMMAX * SHMSEG
です。適切な値は 6 〜 15 です。
SHMMNI
システム内の共用メモリ識別子の最大数。BEA Tuxedo システムでは、掲示板ごとに共用メモリ識別子が必要です。また、実行しているワークステーション・リスナ (WSL) および IIOP リスナ (ISL) ごとにも共用メモリ識別子が必要です。
SHMMIN
共用メモリ・セグメントの最小サイズ (バイト単位)。このパラメータは常に 1 に設定します。
セマフォ
BEA Tuxedo アプリケーションに参加する各プロセスには、セマフォが必要です。セマフォとは、複数のプロセスが同じ共用メモリ領域に同時にアクセスしないように使用する、ハードウェアまたはソフトウェアのフラグです。あるプロセスが 1 つの共用メモリ資源を制御している場合、そのプロセスが資源を解放するまで、それ以外のすべてのプロセスはその共用メモリ資源にアクセスできません。
BEA Tuxedo アプリケーションを起動すると、基となる BEA Tuxedo システムにより、オペレーティング・システムにコンフィギュレーションされているセマフォの数が確認されます。十分な数のセマフォがコンフィギュレーションされていないと、アプリケーションは起動できません。
次のセマフォ・パラメータを調整してください。
SEMMNS
システム内の最大セマフォ数。SEMMNS
の最低限の必要値は、
MAXACCESSERS - MAXWSCLIENTS + 13 です。
MAXACCESSERS
はマシン (サーバとネイティブ・クライアントを含む) 上の BEA Tuxedo システム・プロセスの最大数で、MAXWSCLIENTS
は BEA Tuxedo リモート・クライアントの最大数です。これらのパラメータは、どちらもアプリケーションの UBBCONFIG
ファイルに設定されます。UBBCONFIG
ファイルの詳細については、『BEA Tuxedo アプリケーションの設定』の「コンフィギュレーション・ファイルの作成方法」、または『BEA Tuxedo のファイル形式とデータ記述方法』の UBBCONFIG(5)
を参照してください。
SEMMNI
アクティブなセマフォ・セットの最大数。
SEMMSL
セマフォ・セットあたりの最大セマフォ数。SEMMNI
と SEMMSL
は、その積が SEMMNS
になるように設定します。BEA Tuxedo システムはセマフォ・セット上でセマフォ操作を行いませんが、できるだけ多くのセマフォをセマフォ・セットに割り当てます。
SEMMAP
メッセージ・セマフォ・セットに使用される制御マップのサイズ。SEMMAP
は、SEMMNI
と同じ値にする必要があります。
SEMMNU
システム内の undo
構造体の数。undo
構造体は、掲示板にアクセスできる各プロセスに必要なので、SEMMNU
は最低でも SEMMNS
と同じ値にします。UNIX オペレーティング・システムでは、突然に異常終了したプロセスによって保持されているセマフォを解除するのに undo
構造体が使用されます。
SEMUME
undo 構造体あたりの undo エントリの最大数。1 に設定すれば十分です。
メッセージ・キューとメッセージ
BEA Tuxedo システムは、クライアントとサーバの通信に UNIX システムのメッセージとメッセージ・キューを使用します。このようなメッセージには、たとえば、サービス要求、サービス応答、会話型メッセージ、任意通知型メッセージ、管理メッセージ、トランザクション制御メッセージなどがあります。
サーバのすべての複数サーバ、単一キュー (MSSQ) セットと個々のサーバに、要求を受信するためのメッセージ・キューがあります。各クライアントには、応答を受信するためのキューがあります。REPLYQ
パラメータが設定されているサーバにも、それぞれ応答キューがあります。
カーネル・メッセージ・パラメータを調整することは、アプリケーションを適切にチューニングするために重要です。不適切な値に設定すると、アプリケーションが起動しなかったり、パフォーマンスが著しく低下することがあります。
次の表に示すように、いくつかのメッセージ・キュー・パラメータを使用して、キュー空間の特性を定義することができます。
パラメータ名 |
指定内容 |
---|---|
|
カーネルに格納できる未処理のメッセージの総数 |
|
1 つのキューに格納できるバイトの最大長 |
|
個々のメッセージの最大サイズ |
|
任意の時点での未処理のメッセージ・セグメントの総数 |
|
各セグメントのサイズ |
これらのパラメータで指定した制限を超えると、ブロッキング状態が発生します。ただし、MSGMAX
は例外です。MSGMNB
の 75% を超えるメッセージ、または MSGMAX
より大きいメッセージは UNIX ファイルに格納されます。受信側にはファイル名を含む小さなメッセージだけが送られます。この動作モードはパフォーマンスを著しく低下させるので、使用しないことをお勧めします。
アプリケーション・デッドロックとは
メッセージの送信時にすべてのプロセスがブロックされると、アプリケーション・デッドロックが発生します。たとえば、クライアントからの要求でメッセージ領域がいっぱいになると、応答を返すサーバがブロックされます。そのため、メッセージを読み取れるサーバがなくなり、デッドロックが発生します。タイムアウトによってデッドロックを解除できる場合もあります。ただし、本来行われるべき処理は何も行われていません。
特に問題となるのは、TPNOREPLY
フラグが指定されている要求を送信するクライアントです。その場合、メッセージのサイズによって異なりますが、クライアントのキューまたはシステムのメッセージ領域にメッセージが蓄積されてしまいます。このようなアプリケーションには、未処理のメッセージ数をそのアプリケーションが制限できるようなフロー制御ルーチンが必要です。
つまり、クライアントやサーバが送信操作 (サービスの要求または応答の送信) でブロックされている場合、潜在的に問題が発生する可能性があります。ただし、システム内のほかのキューにメッセージを受け付けられる領域があれば、1 つのサーバ要求キューが常にいっぱいになっている状態でも、通常は問題は発生しません。
ブロッキング状態がパフォーマンスに及ぼす影響
キューのブロッキング状態は送信側と受信側の両方で、パフォーマンスに問題を引き起こします。ブロックされているプロセスをウェイクアップする際、UNIX オペレーティング・システムは 1 つのプロセスしか処理できない場合でも、特定のイベントによりブロックされているすべてのプロセスをウェイクアップします。処理されないプロセスは再度スリープ状態に戻ります。このプロセス・スケジューリングのオーバヘッドは大きくなる場合があります。
たとえば、複数のサーバ (MSSQ) が存在する空のサーバ要求キューでは、メッセージが受信されると、そのキューにあるすべてのアイドル (ブロックされている) サーバがウェイクアップします。サーバ要求キューがいっぱいになっている場合は、サーバがそれぞれの要求を読み込み、システムはブロックされているすべてのクライアントをウェイクアップします。メッセージのサイズに応じて、ゼロ以上のクライアントがキューにメッセージを置きます。ほかのクライアントは再度スリープ状態に戻ります。システム内には数百ものクライアントが存在する場合もあるので、サービス要求を処理するたびにすべてのクライアントをウェイクアップするのはパフォーマンスを大幅に低下させることになります。
調整可能なメッセージ・パラメータ
適切にチューニングされているシステムでは、キューがいっぱいになることはほとんどありません。メッセージ・フローの変化に対応できるだけの十分な余裕をキューに残す必要があります。チューニングはアプリケーションに依存するので、的確な設定値を示すことはできません。UNIX システムの ipcs(1)
コマンドを使用してキューのスナップショットを取ると、キューがいっぱいかどうかを確認できます。要求の送信時に、TPNOBLOCK
フラグを設定することも 1 つの方法です。このフラグを設定すると、クライアントはキューがいっぱいになっているかどうかを確認でき、キューへの要求の送信を遅延できます。要求待ち行列がいっぱいになっているサーバのスケジューリングの優先順位を上げることも有効な方法です。
以下のメッセージ・パラメータを調整してください。
MSGMNI
一意のメッセージ・キュー識別子の数。マシン上の BEA Tuxedo アプリケーションに参加している各プロセスには、通常、少なくとも 1 つのメッセージ・キューが必要です。MSSQ セットを使用する場合は MSGMNI の値を小さくできます。つまり、MSSQ では、複数のサーバ・プロセスで 1 つのキューを共有します。トランザクション処理では、トランザクション・マネージャ・サーバ (TMS) プロセスのサーバ・グループごとに 1 つのキューを割り当てます。したがって、MSGMNI
の最低限の必要値は、次の計算式から求められます。
MSGMNI = MAXACCESSERS + 7
+ (REPLYQ を持つサーバの数)
+ (MSSQ セットの数)
- (MSSQ セット内のサーバの数)
MSGMAX
バイト単位での最大メッセージ・サイズ。MSGMAX
には、マシン上で実行している BEA Tuxedo アプリケーションを処理できるだけのサイズが必要です。
MSGMNB
バイト単位でのメッセージ・キューの最大長。キューに格納されているすべてのメッセージの合計バイト数より大きくなければなりません。MSGMNB
の最小値は MSGMAX
の値です。MSGMNB
の 75% より長いメッセージは、メッセージ・キューではなくファイルに格納されます。その場合、パフォーマンスが著しく低下するので、このような状態は避けるようにします。
MSGMAP
メッセージ・セグメントを管理するために使用される制御マップ内のエントリ数。MSGMAP
の値は、メッセージ・セグメントの数 (MSGSEG
で指定された値) と同じでなければなりません。
MSGSSZ
バイト単位でのメッセージ・セグメントのサイズ。メッセージは複数のセグメントで構成されます。MSGSSZ
の値は、通常送信されるメッセージのサイズ (BEA Tuxedoシステム・ヘッダも含む) と MSGSSZ
の倍数が等しくなるように設定します。このようにメッセージをいくつかのセグメントに分割すると、領域が無駄になりません。
MSGSEG
システム内のメッセージ・セグメントの数。
MSGTQL
カーネルに格納できる未処理のメッセージの総数。これは任意の時点での未読メッセージの最大数です。
そのほかの調整可能なカーネル・パラメータ
BEA Tuxedo システムでは、そのほかにも設定値を大きくしなければならない UNIX システムの調整可能なパラメータがあります。これらのパラメータはアプリケーションに依存し、すべてのアプリケーションに適用されるわけではありません。各プラットフォームのデフォルト値とその変更手順については、「BEA Tuxedo 8.0 プラットフォーム・データ・シート」を参照してください。
ULIMIT
最大ファイル・サイズ。ULIMIT
は、BEA Tuxedo システムをインストールし、サーバを構築できるだけの値に設定する必要があります。4MB に設定することをお勧めします。
NOFILES
プロセスあたりの最大オープン・ファイル数。BEA Tuxedo サーバには、最低 4 つのファイル記述子が必要です。
MAXUP
スーパーユーザ以外のユーザが使用できる最大プロセス数。BEA Tuxedo システムのプロセス、つまりサーバと管理プロセスは、アプリケーションの UBBCONFIG
ファイルに設定された UID
で実行します。MAXUP
は、これらのプロセスすべてが実行できる大きさの値でなければなりません。
NPROC
システム全体でのプロセスの最大数。
NREGION
割り当てられる領域テーブル・エントリの数。ほとんどのプロセスには、テキスト、データ、スタックの 3 種類の領域があります。アタッチされる共用メモリ・セグメントと共用ライブラリ (テキストとデータを含む) にも領域が必要です。ただし、「共用テキスト」プログラムのテキストのための領域テーブル・エントリは、そのプログラムを実行するすべてのプロセスで共有されます。1 つまたは複数のプロセスにアタッチされる共用メモリ・セグメントでは、それぞれ別の領域テーブル・エントリが使用されます。
NUMTIM
トランスポート層インターフェイス (TLI) がプッシュ (push) できる STREAMS モジュールの最大数。通常のデフォルト値は 16 です。少なくとも 256 以上に設定することをお勧めします。
NUMTRW
カーネルのデータ領域に割り当てる TLI 読み取り/書き込み構造体の数。通常のデフォルト値は 16 です。少なくとも 256 以上に設定することをお勧めします。
|
Copyright © 2001, BEA Systems, Inc. All rights reserved.
|