Oracle Tuxedo システムのインストール

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

UNIX システムでの IPC リソースのコンフィグレーション

以下の節では、UNIX システムでのプロセス間通信 (IPC) パラメータについて説明し、そのコンフィグレーション方法のガイドラインを示します。

 


IPC リソースを制御するパラメータ セット

UNIX 上の Oracle Tuxedo システムでは、UNIX オペレーティング システムの IPC 資源が使用されます。IPC 資源は、以下に示す 3 種類の調整可能なパラメータ セットで制御されます。

調整可能なパラメータの接頭辞
制御内容
SHM
共有メモリの容量
SEM
セマフォの数
MSG
メッセージ キューとメッセージのサイズ

これらのパラメータの設定値は、アプリケーションによって異なります。ほとんどの UNIX システムのデフォルト値は、Oracle Tuxedo アプリケーションを実行するのに十分な大きさには設定されていません。

これらの IPC パラメータは UNIX システムのバージョンによって異なります。以降の節で説明する内容は一般的なものです。プラットフォームごとの正確なパラメータ名とデフォルト、およびパラメータ値の変更については、「Oracle Tuxedo 10g リリース 3 (10.3) プラットフォーム データ シート」を参照してください。パラメータを変更したら、標準の管理ツールを使用してカーネルを再度構築し、オペレーティング システムを再起動する必要があります。プラットフォームの詳細については、オペレーティング システムの管理者に問い合わせるか、「システム管理者ガイド」を参照してください。

Oracle Tuxedo アプリケーションを分散化する場合は、そのアプリケーションに参加するすべての UNIX プラットフォームに必要最低限の IPC 資源を割り当てておく必要があります。

 


共有メモリ

Oracle Tuxedo 環境では、共有メモリが掲示板とワークステーション リスナ (WSL) プロセスおよび IIOP リスナ (ISL) プロセスの制御テーブルで使用されます。また、アプリケーションで使用される場合もあります。

以下の共有メモリ パラメータを調整してください。

SHMMAX

バイト単位での共有メモリ セグメントの最大サイズ。割り当てることのできる共有メモリ セグメントの最大サイズです。ただし、プロセスでは SHMMAX サイズのセグメントを複数使用できます。

SHMSEG

プロセスあたりの共有メモリ セグメントの最大数。1 つのプロセスで使用できる最大共有メモリ サイズ (バイト単位) は、SHMMAX * SHMSEG です。適切な値は 6 ~ 15 です。

SHMMNI

システム内の共有メモリ識別子の最大数。Oracle Tuxedo システムでは、掲示板ごとに共有メモリ識別子が必要です。また、実行しているワークステーション リスナ (WSL) および IIOP リスナ (ISL) ごとにも共有メモリ識別子が必要です。

SHMMIN

共有メモリ セグメントの最小サイズ (バイト単位)。このパラメータは常に 1 に設定します。

 


セマフォ

Oracle Tuxedo アプリケーションに参加する各プロセスには、セマフォが必要です。セマフォとは、複数のプロセスが同じ共有メモリ領域に同時にアクセスしないように使用する、ハードウェアまたはソフトウェアのフラグです。あるプロセスが 1 つの共有メモリ資源を制御している場合、そのプロセスが資源を解放するまで、それ以外のすべてのプロセスはその共有メモリ資源にアクセスできません。

Oracle Tuxedo アプリケーションを起動すると、基底の Oracle Tuxedo システムにより、オペレーティング システムにコンフィグレーションされているセマフォの数が確認されます。十分な数のセマフォがコンフィグレーションされていないと、アプリケーションは起動できません。

次のセマフォ パラメータを調整してください。

SEMMNS

システム内の最大セマフォ数。SEMMNS の最低限の必要値は、
MAXACCESSERS - MAXWSCLIENTS + 13 です。 MAXACCESSERS はマシン (サーバとネイティブ クライアントを含む) 上の Oracle Tuxedo システム プロセスの最大数で、MAXWSCLIENTS は Oracle Tuxedo リモート クライアントの最大数です。これらのパラメータは、どちらもアプリケーションの UBBCONFIG ファイルに設定されます。UBBCONFIG の詳細については、『Oracle Tuxedo アプリケーションの設定』の「コンフィグレーション ファイルの作成」または『Oracle Tuxedo のファイル形式とデータ記述方法』の「UBBCONFIG(5)」を参照してください。

SEMMNI

アクティブなセマフォ セットの最大数。

SEMMSL

セマフォ セットあたりの最大セマフォ数。SEMMNISEMMSL は、その積が SEMMNS になるように設定します。Oracle Tuxedo システムはセマフォ セット上でセマフォ操作を行いませんが、できるだけ多くのセマフォをセマフォ セットに割り当てます。

SEMMAP

メッセージ セマフォ セットに使用される制御マップのサイズ。SEMMAP は、SEMMNI と同じ値にする必要があります。

SEMMNU

システム内の undo 構造体の数。undo 構造体は、掲示板にアクセスできる各プロセスに必要なので、SEMMNU は最低でも SEMMNS と同じ値にします。UNIX オペレーティング システムでは、突然に異常終了したプロセスによって保持されているセマフォを解除するのに undo 構造体が使用されます。

SEMUME

undo 構造体あたりの undo エントリの最大数。1 に設定すれば十分です。

 


メッセージ キューとメッセージ

Oracle Tuxedo システムは、クライアントとサーバの通信に UNIX システムのメッセージとメッセージ キューを使用します。このようなメッセージには、たとえば、サービス要求、サービス応答、会話型メッセージ、非請求メッセージ、管理メッセージ、トランザクション制御メッセージなどがあります。

サーバのすべての複数サーバ、単一キュー (MSSQ) セットと個々のサーバに、要求を受信するためのメッセージ キューがあります。各クライアントには、応答を受信するためのキューがあります。REPLYQ パラメータが設定されているサーバにも、それぞれ応答キューがあります。

カーネル メッセージ パラメータを調整することは、アプリケーションを適切にチューニングするために重要です。不適切な値に設定すると、アプリケーションが起動しなかったり、パフォーマンスが著しく低下することがあります。

次の表に示すように、いくつかのメッセージ キュー パラメータを使用して、キュー空間の特性を定義することができます。

パラメータ名
指定内容
MSGTQL
カーネルに格納できる未処理のメッセージの総数
MSGMNB
1 つのキューに格納できるバイトの最大長
MSGMAX
個々のメッセージの最大サイズ
MSGSEG
任意の時点での未処理のメッセージ セグメントの総数
MSGSSZ
各セグメントのサイズ

これらのパラメータで指定した制限を超えると、ブロッキング状態が発生します。ただし、MSGMAX は例外です。MSGMNB の 75% を超えるメッセージ、または MSGMAX より大きいメッセージは UNIX ファイルに格納されます。受信側にはファイル名を含む小さなメッセージだけが送られます。この動作モードはパフォーマンスを著しく低下させるので、使用しないことをお勧めします。

アプリケーション デッドロックとは

メッセージの送信時にすべてのプロセスがブロックされると、アプリケーション デッドロックが発生します。たとえば、クライアントからの要求でメッセージ領域がいっぱいになると、応答を返すサーバがブロックされます。そのため、メッセージを読み取れるサーバがなくなり、デッドロックが発生します。タイムアウトによってデッドロックを解除できる場合もあります。ただし、本来行われるべき処理は何も行われていません。

特に問題となるのは、TPNOREPLY フラグが指定されている要求を送信するクライアントです。その場合、メッセージのサイズによって異なりますが、クライアントのキューまたはシステムのメッセージ領域にメッセージが蓄積されてしまいます。このようなアプリケーションには、未処理のメッセージ数をそのアプリケーションが制限できるようなフロー制御ルーチンが必要です。

つまり、クライアントやサーバが送信操作 (サービスの要求または応答の送信) でブロックされている場合、潜在的に問題が発生する可能性があります。ただし、システム内のほかのキューにメッセージを受け付けられる領域があれば、1 つのサーバ要求キューが常にいっぱいになっている状態でも、通常は問題は発生しません。

ブロッキング状態がパフォーマンスに及ぼす影響

キューのブロッキング状態は送信側と受信側の両方で、パフォーマンスに問題を引き起こします。ブロックされているプロセスをウェイクアップする際、UNIX オペレーティング システムは 1 つのプロセスしか処理できない場合でも、特定のイベントによりブロックされているすべてのプロセスをウェイクアップします。処理されないプロセスは再度スリープ状態に戻ります。このプロセス スケジューリングのオーバーヘッドは大きくなる場合があります。

たとえば、複数のサーバ (MSSQ) が存在する空のサーバ要求キューでは、メッセージが受信されると、そのキューにあるすべてのアイドル (ブロックされている) サーバがウェイクアップします。サーバ要求キューがいっぱいになっている場合は、サーバがそれぞれの要求を読み込み、システムはブロックされているすべてのクライアントをウェイクアップします。メッセージのサイズに応じて、ゼロ以上のクライアントがキューにメッセージを置きます。ほかのクライアントは再度スリープ状態に戻ります。システム内には数百ものクライアントが存在する場合もあるので、サービス要求を処理するたびにすべてのクライアントをウェイクアップするのはパフォーマンスを大幅に低下させることになります。

調整可能なメッセージ パラメータ

適切にチューニングされているシステムでは、キューがいっぱいになることはほとんどありません。メッセージ フローの変化に対応できるだけの十分な余裕をキューに残す必要があります。お勧めできるこれといった設定はありません。調整はアプリケーションによって大きく異なります。UNIX システムの ipcs(1) コマンドを使用してキューのスナップショットを取ると、キューがいっぱいかどうかを確認できます。要求の送信時に、TPNOBLOCK フラグを設定することも 1 つの方法です。このフラグを設定すると、クライアントはキューがいっぱいになっているかどうかを確認でき、キューへの要求の送信を遅延できます。要求キューがいっぱいになっているサーバのスケジューリングの優先順位を上げることも有効な方法です。

以下のメッセージ パラメータを調整してください。

MSGMNI

ユニークなメッセージ キュー識別子の数。マシン上の Oracle Tuxedo アプリケーションに参加している各プロセスには、通常、少なくとも 1 つのメッセージ キューが必要です。MSSQ セットを使用する場合は MSGMNI の値を小さくできます。つまり、MSSQ では、複数のサーバ プロセスで 1 つのキューを共有します。トランザクション処理では、トランザクション マネージャ サーバ (TMS) プロセスのサーバ グループごとに 1 つのキューを割り当てます。したがって、MSGMNI の最低限の必要値は、次の計算式から求められます。
MSGMNI = MAXACCESSERS + 7
+ (number of servers with REPLYQ)
+ (number of MSSQ sets)
- (number of servers in MSSQ sets)

MSGMAX

バイト単位での最大メッセージ サイズ。MSGMAX には、マシン上で実行している Oracle Tuxedo アプリケーションを処理できるだけのサイズが必要です。

MSGMNB

バイト単位でのメッセージ キューの最大長。キューに格納されているすべてのメッセージの合計バイト数より大きくなければなりません。MSGMNB の最小値は MSGMAX の値です。MSGMNB の 75% より長いメッセージは、メッセージ キューではなくファイルに格納されます。その場合、パフォーマンスが著しく低下するので、このような状態は避けるようにします。

MSGMAP

メッセージ セグメントを管理するために使用される制御マップ内のエントリ数。MSGMAP の値は、メッセージ セグメントの数 (MSGSEG で指定された値) と同じでなければなりません。

MSGSSZ

バイト単位でのメッセージ セグメントのサイズ。メッセージは複数のセグメントで構成されます。MSGSSZ の値は、通常送信されるメッセージのサイズ (Oracle Tuxedo システム ヘッダも含む) と MSGSSZ の倍数が等しくなるように設定します。このようにメッセージをいくつかのセグメントに分割すると、領域が無駄になりません。

MSGSEG

システム内のメッセージ セグメントの数。

MSGTQL

カーネルに格納できる未処理のメッセージの総数。これは任意の時点での未読メッセージの最大数です。

 


そのほかの調整可能なカーネル パラメータ

Oracle Tuxedo システムでは、そのほかにも設定値を大きくしなければならない UNIX システムの調整可能なパラメータがあります。これらのパラメータはアプリケーションに大きく依存しており、すべてのアプリケーションに適用されるわけではありません。各プラットフォームのデフォルトとそれらの変更手順については、「Oracle Tuxedo 10g リリース 3 (10.3) プラットフォーム データ シート」を参照してください。

ULIMIT

最大ファイル サイズ。ULIMIT は、Oracle Tuxedo システムをインストールし、サーバを構築できるだけの値に設定する必要があります。4MB に設定することをお勧めします。

NOFILES

プロセスあたりの最大オープン ファイル数。Oracle Tuxedo サーバには、最低 4 つのファイル記述子が必要です。

MAXUP

スーパーユーザ以外のユーザが使用できる最大プロセス数。Oracle Tuxedo システムのプロセス、つまりサーバと管理プロセスは、アプリケーションの UBBCONFIG ファイルに設定された UID で実行します。MAXUP は、これらのプロセスすべてが実行できる大きさの値でなければなりません。

NPROC

システム全体でのプロセスの最大数。

NREGION

割り当てられる領域テーブル エントリの数。ほとんどのプロセスには、テキスト、データ、スタックの 3 種類の領域があります。アタッチされる共有メモリ セグメントと共有ライブラリ (テキストとデータを含む) にも領域が必要です。ただし、「共有テキスト」プログラムのテキストのための領域テーブル エントリは、そのプログラムを実行するすべてのプロセスで共有されます。1 つまたは複数のプロセスにアタッチされる共有メモリ セグメントでは、それぞれ別の領域テーブル エントリが使用されます。

NUMTIM

トランスポート層インタフェース (TLI) がプッシュ (push) できる STREAMS モジュールの最大数。通常のデフォルト値は 16 です。少なくとも 256 以上に設定することをお勧めします。

NUMTRW

カーネルのデータ領域に割り当てる TLI 読み取り/書き込み構造体の数。通常のデフォルト値は 16 です。少なくとも 256 以上に設定することをお勧めします。

  ページの先頭       前  次