Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)


3.15.1 コネクションの障害検知

コネクションプーリングを使用している場合,リソースダウン・ネットワーク障害などが発生すると,ユーザプログラムのコネクション取得要求に対し,障害が発生したコネクションを返すおそれがあります。コネクションの障害検知機能を使用すると,プーリングされているコネクションに障害が発生していないかをチェックし,障害が発生したコネクションをなるべく返さないようにできます。

コネクション障害検知機能は,コネクション取得リトライ機能と併用できます。この場合,ユーザプログラムのコネクション取得要求時にコネクション障害を検知すると,新しいコネクション取得のリトライを実施し,障害が復旧した時点でコネクションをユーザプログラムに返すことができます。

なお,新しいコネクションを作成して返すことは,コネクションの障害検知のタイミングを「コネクション取得要求時」に設定している場合だけ有効になります。

コネクションの障害検知のタイミングについては,「(2) 障害検知を実施するタイミング」を参照してください。

〈この項の構成〉

(1) 前提条件

コネクションの障害検知機能の利用可否を次の表に示します。

表3‒62 コネクションの障害検知機能の利用可否

リソース

接続方法

利用可否

データベース

DB Connector

データベース上のキュー

DB Connector for Reliable MessagingとReliable Messaging

OpenTP1

TP1 Connector

  ×※1

TP1/Message Queue - Access

  ×※1

SMTPサーバ

メールコンフィグレーション

×

JavaBeansリソース

×

そのほかのリソース

Connector 1.0仕様またはConnector 1.5仕様に準拠したリソースアダプタ

  ※2

(凡例)○:使用できる ×:使用できない △:条件によって異なる −:該当なし

注※1 アプリケーションサーバが提供するコネクションの障害検知機能は使用できませんが,TP1 ConnectorまたはTP1/Message Queue - Accessでは,コネクションの障害検知機能と同様の機能が提供されています。

注※2 Connector 1.5仕様に準拠したリソースアダプタを使用している場合に,リソースアダプタがValidatingManagedConnectionFactoryインタフェースのgetInvalidConnectionsメソッドを実装しているときに使用できます。

(2) 障害検知を実施するタイミング

コネクションの障害を検知するタイミングは,表に示したタイミングのどちらかを選択できます。

表3‒63 コネクションの障害検知のタイミング

障害検知のタイミング

内容

コネクション取得要求時

コネクション取得時に,毎回,障害検知を実施します。この場合,コネクション取得要求のレスポンス性能が劣化しますが,障害が発生したコネクションを取得する確率は低くなります。コネクション取得要求の頻度が少ない場合や,障害が発生したコネクションの取得がほとんど許容されない場合に有用です。

一定間隔

一定時間の間隔で,障害検知を実施します。障害検知の間隔をある程度長くすることで,障害検知処理による性能劣化を少なくできます。ただし,障害が発生したコネクションを取得する確率は高くなります。コネクション取得要求の頻度が多い場合や,障害が発生したコネクションの取得がある程度許容される場合に有用です。

なお,デフォルトでは,コネクション取得要求時に障害検知を実施する設定となっています。コネクションの障害検知を実施しない設定もできます。

コネクション障害検知の有効・無効の切り替えや,検知するタイミングの設定は,リソースアダプタのプロパティとして設定します。リソースアダプタの設定については,「3.15.13 実行環境での設定」を参照してください。

(3) 障害検知のタイムアウト

コネクション障害検知に対する応答時間にタイムアウトを設定できます。

サーバ障害やネットワーク障害が発生してリソースからの応答が返らない場合,コネクション障害検知の実行に対しても応答が返らなくなることがあります。タイムアウトを設定することで,リソースからの応答が返らない場合も,コネクションのチェックを終了して,処理を継続できます。なお,障害検知のタイムアウト時間は簡易構築定義ファイルのJ2EEサーバで指定するキーに,任意の時間を指定できます(デフォルト値は5秒)。

コネクション障害検知のタイムアウトは,コネクション管理スレッドを使用して動作します。コネクション管理スレッドは,コネクションプールのコネクション数の最大値に応じてリソースアダプタ開始時にシステム内で作成されます。コネクション管理スレッドの数と,コネクションプールのコネクション数の最大値の関係を次に示します。

コネクション管理スレッド数 = コネクションプールのコネクション数の最大値×2

このため,コネクション障害検知にタイムアウトを設定すると,設定しない場合に比べて多くのメモリを消費します。必要なメモリ使用量を適切に見積もってください。

また,コネクションプールのコネクション数の最大値の設定が無制限の場合,メッセージが出力されて,コネクション障害検知のタイムアウトが無効になります。

なお,コネクション障害検知のタイムアウトを有効にする場合の注意事項の詳細については,「(5) 注意事項」を参照してください。

コネクション障害検知のタイムアウトの有効・無効は,リソースアダプタのプロパティをカスタマイズして設定します。リソースアダプタのプロパティの設定については,「3.15.13 実行環境での設定」を参照してください。

(4) チェック時の動作

コネクション障害検知をコネクション取得要求時に実施する場合と,一定間隔で実施する場合の動作について説明します。

(5) 注意事項

障害検知機能についての注意事項を説明します。

(a) パラレルサーバ構成のリソースを使用する場合の注意事項

コネクション障害検知を一定間隔で実施する場合,コネクションプール内のコネクションをサンプリングチェックするため,一部のサーバに障害が発生しても検知できないことがあります。

(b) コネクション障害検知のタイムアウトを有効にした場合の注意事項

コネクション障害検知のタイムアウトを有効にした場合の注意事項を次に示します。

  • コネクション障害検知にタイムアウトを設定した場合,システム内で,コネクションプールのコネクション数に応じた障害検知用のスレッドが生成されます。このため,コネクション障害検知にタイムアウトを設定すると,設定しない場合に比べて多くのメモリを消費するので注意が必要です。

    障害検知用のスレッドは,コネクションプールの最大コネクション数の2倍の数だけ作成されます。必要なメモリ使用量を適切に見積もってください。

  • サーバ障害やネットワーク障害などが繰り返し発生する場合にシステムの運用を続けると,コネクションチェックメソッドを実行中のコネクション管理スレッドが増え続け,システム側が用意したすべてのコネクション管理スレッドを使い切るおそれがあります。使用できるコネクション管理スレッドがない場合,メッセージが出力されて,コネクション取得要求がエラーとなります。

  • コネクション障害検知を実施する場合,コネクションプールから取り除いた未使用コネクションは,コネクションプール内のコネクション数としてカウントされません。そのため,コネクションプール内のコネクションとコネクションプールから取り除いた未使用コネクションの総数が,コネクションプールのコネクション数の最大値を一時的に超える場合があります。

(c) 障害検知機能を利用できないリソースを使用する場合の注意事項

障害検知機能を利用できないリソースに対しては,Connector属性ファイルで次のパラメタを指定して,コネクション管理スレッドを使用しない設定にしてください。

  • コネクションの障害検知のタイムアウト

    <property>タグのValidationType=0