7.3.4 ポート数の制限方法
OpenTP1を使用して大規模なシステムを構築する場合,TCP/IPが管理するポートが不足する可能性があります。このような場合に,OpenTP1で使用するポートを制限する方法について説明します。
OpenTP1は,コネクション確立時のオーバヘッドを削減するために,確立したコネクションを切断しないで保持し,同じプロセス間通信に再利用します。保持するコネクション数が上限になった場合,コネクションを確立したプロセス間の合意によって,コネクションを切断します。これを一時クローズ処理といいます。
ユーザは,システム共通定義,ユーザサービス定義,およびユーザサービスデフォルト定義で次に示すオペランドを指定できます。
set ipc_sockctl_highwater = a,b set ipc_sockctl_watchtime = ソケット再利用可能監視時間
a:ソケットの一時クローズ処理開始数パーセンテージ
b:ソケットの一時クローズ処理非対象数パーセンテージ
-
ソケットの一時クローズ処理開始数パーセンテージの指定
OpenTP1は,プロセス内のソケット用に使用しているファイル記述子の数が,次の値を超えた時点で,一時クローズ処理を開始します。
max_socket_descriptorsオペランドの指定値 ×(ipc_sockctl_highwaterオペランドの指定値a/100)
-
ソケットの一時クローズ処理非対象数パーセンテージの指定
一時クローズ処理の対象外とするコネクション数のパーセンテージを指定できます。一時クローズ処理の対象外となるコネクション数は,次の値です。
max_socket_descriptorsオペランドの指定値 ×(ipc_sockctl_highwaterオペランドの指定値b/100)
-
ソケット再利用可能監視時間の指定
ipc_sockctl_watchtimeオペランドには,プロセス内のソケット用に使用しているファイル記述子の数が,max_socket_descriptorsオペランドの指定値になった時点から,一時クローズ処理によってソケットが再利用できるようになるまでの監視時間(秒)を指定します。
同じプロセスとの間の通信が多く発生しない運用や,通信する相手プロセスが非常に多いシステムでは,保持しているコネクション数がある程度増えてきたところで,一時クローズ処理によって,適度にコネクションを解放して,1プロセスで使用するソケット数を調整し,再利用できます。
また,OpenTP1のプロセスから送信する場合は,コネクションを確立するときに送信用ポートを確保しますが,送信用ポートの個数は,一つのコンピュータで上限があるため,システム全体の合計が上限を超えないように,UAPプロセスが保持するコネクション数を調整する必要があります。
これらのオペランドの指定値が適切でないと,1プロセス内で使用できるソケット数が上限に達してしまい,一時クローズ処理によるソケットの再利用が新たなコネクション確立要求に追いつかなかったり,システム全体で使用するポート数がTCP/IPの上限を超えてしまい,プロセスが異常終了することがあります。