IJServerクラスタ未起動やネットワーク異常でクライアントからRMI-IIOPによるサーバへの接続に失敗した場合、接続のリトライが行われます。この接続に失敗した場合のリトライ間隔などを指定し、クライアントにタイムアウトが通知される時間を制御できます。
本監視機能の設定は、クライアントのJava VMでJava VMオプション(システムプロパティ)として指定します。
com.sun.corba.ee.transport.ORBTCPConnectTimeouts
設定構文
initial:max:backoff:maxsingle
項目 | 設定内容 | 値の範囲 |
---|---|---|
initial | 初期リトライ間隔(ミリ秒)を設定します。 | 1~2147483647 |
max | 全体待ち時間超過判定値(ミリ秒)を設定します。 | 1~2147483647 |
backoff | バックオフ値(整数値)を設定します。通常は、10~100の値を設定します。 例 backoffが20の場合、リトライ間隔は1.2倍、backoffが100の場合、リトライ間隔は2倍となります。 | 1~2147483647 |
maxsingle | 一回あたりの最大リトライ間隔(ミリ秒)を設定します。 | 1~2147483647 |
250:60000:100:5000
IJServerクラスタをクライアントとして使用する場合
Java VMオプションに設定します。
-Dcom.sun.corba.ee.transport.ORBTCPConnectTimeouts=設定値
アプリケーションクライアントコンテナの場合
VMARGS環境変数に設定します。
set VMARGS=-Dcom.sun.corba.ee.transport.ORBTCPConnectTimeouts=設定値
VMARGS=-Dcom.sun.corba.ee.transport.ORBTCPConnectTimeouts=設定値 export VMARGS
スタンドアロンクライアントの場合
Java VMオプションに設定します。
-Dcom.sun.corba.ee.transport.ORBTCPConnectTimeouts=設定値
maxの判定時にコネクションの接続処理時間を含めない場合の処理を以下の図に示します。
保持する接続先リストA, B, Cのすべてに接続を試みた後、(1)の時間待機します。
接続をリトライします。
保持する接続先リストA, B, Cのすべてに接続を試みた後、(2)の時間待機します。
接続をリトライします。
保持する接続先リストA, B, Cのすべてに接続を試みた後、(3)の時間待機します。
接続リトライから待機までを繰り返します。
注意
(1)、(2)、(3)の時間はリトライの回数と「backoff」の数値により長くなりますが、「maxsingle」の間隔を超えません。
全体待ち時間[max]の超過判定は、接続先リストの最後の接続(C)が失敗するたびに行われます。
接続処理中や待機処理中に全体待ち時間[max]を超過した場合でも、クライアントにタイムアウトが通知されるのは接続リストの最後の接続が失敗した直後となり、設定値との間に誤差が生じます。
サーバへの接続試行が全て失敗してタイムアウトが発生した場合、次の接続試行は期待する回数になりません。
例
以下の場合の動作例を示します。
接続先が複数(接続先A、接続先B、接続先C)である。
プロパティの設定が「initial:max:backoff:maxsingle=100:250:100:200」である。
コネクション接続のエラー検出まで50ミリ秒かかる。
経過時間 | 待ち時間の合計 | コネクション接続に関するリトライ動作 |
---|---|---|
0 | 0 | コネクション接続試行(接続先A)。 |
50 | 0 | コネクション接続失敗を検出し、次の接続先へコネクション接続試行(接続先B)。 |
100 | 0 | コネクション接続失敗を検出し、次の接続先へコネクション接続試行(接続先C)。 |
150 | 0 | コネクション接続失敗を検出し、リトライ待ち(100ミリ秒)。 |
250 | 100 | コネクション接続試行のリトライ(接続先A)。 |
300 | 100 | コネクション接続失敗を検出し、次の接続先へコネクション接続試行のリトライ(接続先B)。 |
350 | 100 | コネクション接続失敗を検出し、次の接続先へコネクション接続試行のリトライ(接続先C)。 |
400 | 100 | コネクション接続失敗を検出し、リトライ待ち(200ミリ秒)。 |
600 | 300 | コネクション接続試行のリトライ(接続先A)。 |
650 | 300 | コネクション接続失敗を検出し、次の接続先へコネクション接続試行のリトライ(接続先B)。 |
700 | 300 | コネクション接続失敗を検出し、次の接続先へコネクション接続試行のリトライ(接続先C)。 |
750 | 300 | コネクション接続失敗を検出し、待ち時間の合計がmaxを超過しているので、アプリケーションに例外を通知。 |
全体待ち時間[max]の超過を検知した後、クライアントに以下の例外を内包する例外が通知されます。
org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 201 completed: No
また、アプリケーションクライアントコンテナを使用する場合には、依存性の注入などを行うために起動時にコンテナがサーバに通信するため、以下の例外によりアプリケーションクライアントコンテナの起動に失敗します。この場合には、起動時のログに以下の例外情報が出力されているか確認してください。
javax.naming.CommunicationException: Can't find SerialContextProvider [Root exception is org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 201 completed: No]
注意
IJServerクラスタプロセス内の呼出しの場合は、RMI-IIOPが使用されませんので監視が行われません。