読者です 読者をやめる 読者になる 読者になる

「Tomcat」アイドル状態のコネクションについて

Tomcat ( Commons DBCP ですが ) で、プール内に一定時間以上アイドル状態で存在し続けたコネクションを切断するパラメータ timeBetweenEvictionRunsMillis、numTestsPerEvictionRun、minEvictableIdleTimeMillis 辺りについてのメモ ( 何度か調べてはいるのですがいつも忘れちゃうので。ドキュメントみれば直ぐわかりますが毎回調べる時間がもったいない )。

ドキュメントは、以下になります。
・DBCP - Configuration
http://commons.apache.org/proper/commons-dbcp/configuration.html

※ 余談ですが Tomcat 6.0 系だど Commons DBCP 1.3、Tomcat 7.0 系だと Commons DBCP 1.4 みたいです。ただ、Tomcat 7.0 系は、Tomcat JDBC Connection Pool なるものもあるみたいです。
Apache Tomcat 6.0 (6.0.37) - JNDI Datasource HOW-TO
http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html
Apache Tomcat 7 (7.0.42) - JNDI Datasource HOW-TO
http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html
Apache Tomcat 7 (7.0.42) - The Tomcat JDBC Connection Pool
http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html


ドキュメントの内容を踏まえると
=====
timeBetweenEvictionRunsMillis で設定した間隔 ( ミリ秒 ) で、プール内のアイドル状態のコネクションを確認するスレッド ( idle object evictor thread ) が実行されて、その際に minEvictableIdleTimeMillis で設定した時間以上アイドル状態で存在し続けているコネクションがあれば、そのコネクションについては切断する。idle object evictor thread が一回実行される度に確認するコネクションの個数は numTestsPerEvictionRun で設定する。
=====
みたいな感じでしょうか。

ただし、検証で確認した限りでは、アイドル状態のコネクション数が minIdle で設定したコネクション数を下回ることはなさそうでした ( まぁ、当たり前かもですが。ここも忘れそうなので一応メモ )。

以上です。