commons dbcpを使用して、as400上のDB2へのJDBC接続でTomcat 7.0に取り組んでいます。サーバーに負荷をかけるとすぐに、設定した30分のremoveAbandonedTimeout設定を無視して、データベースへの接続をすぐに開いたり閉じたりします。いくつかの設定を試しましたが、役に立ちませんでした。たとえば、15 秒間隔で、明白な理由もなく 150 の接続を開き、140 の接続を閉じます。このアプリケーションは古い WebSphere サーバーで実行されており、本当にアイドル状態でない限り、接続を閉じません。
これが私の構成です:
<Resource name="MYDB"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
driverClassName="com.ibm.as400.access.AS400JDBCDriver"
url="jdbc:as400://mydb.na.sysco.net;blockCriteria=2;dateFormat=iso;libraries=*LIBL;naming=system;errors=full"
username="user"
password="pass"
maxActive="350"
maxWait="180000"
minIdle="10"
maxIdle="50"
testWhileIdle="true"
validationQuery="select 1 from sysibm.sysdummy1"
timeBetweenEvictionRunsMillis="34000"
minEvictableIdleTimeMillis="1800000"
removeAbandonedTimeout="1800"
removeAbandoned="true"
logAbandoned="true"/>
システムがアイドル状態のとき、またはテスト アカウントが 2 つしかないときは、期待どおりに動作しますが、サーバーに負荷をかけるとすぐに大量の開閉が開始されます。たとえば、同じ 15 秒間隔で 150 の接続を開き、90 の接続を閉じます。as400 の QZ ジョブの開始と終了に関連するソケットのオープンとクローズを監視ソフトウェアから読み取っています。接続が使用されている間、これは継続的に行われます。
これは、接続プールの目的に反します。どんな考えやアイデアでも大歓迎です。
また、最初にどのパラメーターを使用する必要があるかが明確でないため、混乱します。Tomcat JDBC 接続プール パラメータとは異なる commons dbcp パラメータ、つまり removeAbandonedOnMaintenance は受け入れられません。ただし、minEvictableIdleTimeMillis のデフォルト値 1800000 が選択され、Tomcat jdbc プール パラメータから 60000 ではありません。
https://commons.apache.org/proper/commons-dbcp/api-1.2.2/index.html
https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html
パラメータを明示的に設定しない場合、これがデフォルトとして得られるものです。Commons DBCP パラメータではなく、すべての tomcat jdbc プール パラメータがリストされているようです。ただし、Tomcat JDBC 接続プール パラメータから 60 秒ではなく、commons DBCP から minEvictableIdleTimeout のデフォルトを取得します。奇妙な部分は、removeAbandoned パラメータが commons dbcp にリストされていないことです。これは、removeAbandonedOnMaintenance と removeAbandonedOnBorrow です。私は今、このゼリーを壁に釘付けにしようとしています.
jmxproxy を使用して、リアルタイムの統計と設定を取得します。
http://myserver:8080/manager/jmxproxy/?qry=Catalina%3Atype%3DDataSource%2C *
Name: Catalina:type=DataSource,class=javax.sql.DataSource,name="EOPDB"
modelerType: org.apache.tomcat.util.modeler.BaseModelMBean
maxIdle: 8
testOnBorrow: false
defaultTransactionIsolation: -1
testOnReturn: false
maxActive: 350
numActive: 104
numTestsPerEvictionRun: 3
minIdle: 0
maxWait: 180000
closed: false
defaultAutoCommit: true
numIdle: 8
validationQueryTimeout: -1
testWhileIdle: false
driverClassName: com.ibm.as400.access.AS400JDBCDriver
accessToUnderlyingConnectionAllowed: false
url: jdbc:as400://mydb;blockCriteria=2;dateFormat=iso;libraries=*LIBL;naming=system;errors=full
removeAbandonedTimeout: 300
defaultReadOnly: false
logAbandoned: false
poolPreparedStatements: false
maxOpenPreparedStatements: -1
removeAbandoned: false
minEvictableIdleTimeMillis: 1800000
timeBetweenEvictionRunsMillis: -1
initialSize: 0