7.3.10 ネットワーク環境のチューニング方法
大規模システムを構築する場合に,ネットワーク環境によって発生しやすい障害を防止する方法について説明します。
OpenTP1のRPCは,TCP/IPのタイマ監視値をOSが実装しているタイマ値よりも小さい値で動作するように制御します。WANを経由した遠隔地との通信など,伝送効率の悪いネットワークを使用した場合,通信障害が発生することがあります。
このような場合,ユーザは,システム共通定義,ユーザサービス定義,およびユーザサービスデフォルト定義で次に示すオペランドを指定することで,問題を解消できます。
set ipc_conn_interval = コネクション確立監視時間 set ipc_send_interval = データ送信監視間隔 set ipc_send_count = データ送信監視回数 set ipc_header_recv_time = 通信制御データの受信監視時間 set ipc_backlog_count = コネクション確立要求を格納するキューの長さ
-
コネクション確立監視時間の指定
送信先プロセスとのコネクションが未確立の場合,OpenTP1は,TCP/IPのconnect()システムコールを呼び出します。このとき,ソケットをノンブロッキングモードで使用しているため,すぐにコネクションが確立できない場合,select()システムコールを使用してTCP/IPからのコネクション確立完了のイベントを受信するまで監視します。
ipc_conn_intervalオペランドを指定することによって,select()システムコールを使用してTCP/IPからのコネクション確立完了のイベントを受信するまでの監視時間を指定できます。
-
データ送信監視間隔およびデータ送信監視回数の指定
コネクション確立後,OpenTP1は,write()システムコールを使用してTCP/IP通信バッファに送信データを書き込みます。
WANを経由する通信などでネットワークの伝送品質が悪くパケットの消失が繰り返し発生する場合や,TCP/IP通信バッファ以上のデータを送信する場合は,TCP/IP通信バッファに送信データを書き込めないでwrite()システムコールのリトライが発生する可能性があります。
ipc_send_intervalオペランドを指定することによって,write()システムコールのデータ送信監視間隔を指定できます。
ipc_send_countオペランドを指定することによって,write()システムコールのデータ送信監視回数を指定できます。
-
通信制御データの受信監視時間の指定
データ受信の開始後に,ネットワークの障害などによってOpenTP1の通信制御データを正しく受信できない状態になると,他プロセスからのコネクション設定要求や新しいデータ受信処理を開始できない状態が続いてしまいます。
ipc_header_recv_timeオペランドを指定することによって,通信制御データを受信するまでの時間を監視できます。
-
コネクション確立要求を格納するキュー(リッスンキュー)の長さの指定
OpenTP1は,コネクション接続要求を受信するソケットに対し,listen()システムコールを発行します。listen()システムコールに指定するリッスンキューの長さには,OpenTP1をコンパイルした環境のOSが定義しているSOMAXCONNを指定しています。SOMAXCONNの値については,「リリースノート」を参照してください。一度に大量のコネクション接続要求を受信すると,リッスンキューが不足し,コネクション接続元のコネクション接続要求はエラーリターンする可能性があります。システム共通定義のipc_backlog_countオペランドを指定すると,リッスンキューの長さを変更できます。リッスンキューに指定できる最大値,およびSOMAXCONNの値は動作環境のOSによって異なります。そのため,ipc_backlog_countオペランドに動作環境のSOMAXCONN以上の値を指定する場合,動作環境のOSのマニュアルを参照してこれらの値を確認し,指定する値を決定してください。