JDBCのコネクションプールで初期プールサイズ(initialPoolSize)を30に設定しています。
DB側のセッション情報を確認していると、セッション自体は、300本ほどのコネクションが張られていますが、実際に利用されているのは、特定の10本ほどしか利用されていないように見えます。
これは、同時に10セッション分しか接続に来ていないため、このような状況に見えるのでしょうか?それとも、どこかの設定の影響でしょうか?
上記の現象は両方の可能性があります。JDBCデータソースは以下のように動作します。
プロセス毎に初期プールサイズ数分のDB接続が行われます。プロセス数は各プロセスグループのプロセス数の合計です。(なお、ドメインエージェント上で動作するServlet等のWebアプリケーションからデータベースを利用する場合、プロセス数の合計に1を加えて計算してください。)
初期プールサイズを30に指定すると、アプリケーションの動作状況に依らず、プロセス起動時に1プロセスあたり30本の接続を行います。なお、データベースサーバの状態監視オプション[checkServerOption]に「定期的にデータベースサーバの状態を確認[monitor]」を指定し、データベースサーバの監視コマンド[checkServerCommand]にconnect以外を指定する場合は、アプリケーションで使用するJDBCコネクション数にデータベースサーバを監視するための接続(1本)を加え、31本となります。ただし、ここでは1プロセスあたり30本の接続として以下説明いたします。
プロセスグループのプロセス数が合計10個あるとすると、300本の接続が行われます。
300本の接続の中で分散されるかどうかは、プロセスグループのthreadCount(スレッド数)の設定に依ります。プロセスグループのthreadCount(スレッド数)が1であると、同時に10スレッドしか動作しませんので、常時使用されるJDBCコネクションが10個程度になります。
設定の以外で、実際のプロセス数と初期プールサイズから、想定される数を大きく上回る接続数になっている場合は、JDBCデータソース コネクションのガベージコレクト機能の動作オプション[checkGarbageOption]を指定して、JDBCコネクションのクローズ漏れがないかをご確認ください。
ガベージコレクト機能の動作オプション[checkGarbageOption]の設定方法は次の通りです。
・統合運用管理ツール/Webコンソールの場合
[<ドメイン名>]
-[リソース]
-[JDBCデータソース]
-[<データソース名(例:jdbc/A)>]
「拡張」タブの「コネクションのガベージコレクト機能の動作オプション」
を既定値「ガベージコレクトの監視なし」
から「JDBCコネクションの切断とロールバック。リークに関する情報をログ出力。」に変更し、「更新」を押下
・運用管理コマンドの場合
otxadmin> login --user <ユーザ名> --password <パスワード> --host <ホスト名> --port <対象ドメインの管理ポート>
otxadmin> set server.resources.jdbc-datasource.<データソース名(例:jdbc/A)>.checkGarbageOption=debug
(既定値は none )
変更内容を動作に反映するためには、V8.4以降の場合、下記の「設定変更内容の反映」
の操作を行うか、アプリケーショングループの再起動、もしくは、ドメインの再起動が必要です。
・統合運用管理ツール/Webコンソールの場合
[<ドメイン名>]
-[リソース]
-[JDBCデータソース]
-[<データソース名(例:jdbc/A)>]
このMOを右クリックもしくは[操作]タブの「設定変更内容の反映」を実行
・運用管理コマンドの場合
otxadmin> login --user <ユーザ名> --password <パスワード> --host <ホスト名> --port <対象ドメインの管理ポート>
otxadmin> publish-jdbc-datasource <データソース名(例:jdbc/A)>
なお調査が終わり次第、checkGarbageOptionの設定は既定値に戻してください。
【対象製品】Application Server
【確認済みのバージョン】V6以降
【確認済みのエディション】 すべて
【確認済みの対象OS】すべて
【確認済みのJavaバージョン】すべて
【コンポーネント】JDBCデータソース
【カテゴリー】運用/設定