Apache Tomcat 8.5.16でApache DBCP2 JNDIデータソースを設定しました。 context.xmlのMy Resourceタグは以下のようになります。Apache DBCP2接続プールがTomcatの起動時にmaxTotalよりも多くのMySQL接続を開く
<Resource auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb?autoReconnect=true&useSSL=false"
username="root"
password="mypassword"
name="jdbc/myDS"
initialSize="5"
minIdle="5"
maxIdle="10"
maxTotal="20"
testOnCreate="true"
testOnBorrow="true"
testOnReturn="true"
testWhileIdle="true"
validationQuery="SELECT 1 from dual"
validationQueryTimeout="60"
timeBetweenEvictionRunsMillis="180000"
numTestsPerEvictionRun="10"
softMinEvictableIdleTimeMillis="150000"
maxConnLifetimeMillis="300000"
logAbandoned="true"
removeAbandonedOnBorrow="true"
removeAbandonedOnMaintenance="true"
removeAbandonedTimeout="60"
maxWaitMillis="60000" />
私の質問は以下のとおりです。
- 私は(私はまだTomcatで任意のアプリケーションを展開していない)Tomcatを開始しました。私はMYSQLクライアント端末を開いてrootとしてログインしました。今すぐコマンドshow processlistを実行すると、31の接続が表示されています。 MYSQLクライアント端末からは1、Tomcatからは30です。 maxTotalが20のときDBCP2が30の接続を取得した理由いいえ、誰かがtomcatとMYSQLクライアント端末以外のMYSQLを使用しています。
- 私はJNDIデータソースを使用するためにtomcatにアプリケーションをデプロイしていないので、DBCP2からの私の接続はすべてアイドルです。 timeBetweenEvictionRunsMillis = "180000"は、これらのアイドル状態の接続を削除していません。
- 私が削除するときminIdle = "5"。その後、180000ミリ秒後に30個のMYSQL接続がすべて接続プールから削除され、接続プールサイズはゼロになります。
この現象を理解してもらえたら助かります。ありがとうございます。
あなたが** a)**これらのデフォルトアプリケーションが必要な場合(本番ではおそらくそうではありません)、** b)**すべて*アプリケーション用の明示的にcontext.xml内の接続プールを宣言します、** c)**は、いくつかの非手術的な接続を開いていることによるパフォーマンスの影響がないかどうかを気にします。 –