2017-08-18 178 views
0

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&amp;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" /> 

私の質問は以下のとおりです。

  1. 私は(私はまだTomcatで任意のアプリケーションを展開していない)Tomcatを開始しました。私はMYSQLクライアント端末を開いてrootとしてログインしました。今すぐコマンドshow processlistを実行すると、31の接続が表示されています。 MYSQLクライアント端末からは1、Tomcatからは30です。 maxTotalが20のときDBCP2が30の接続を取得した理由いいえ、誰かがtomcatとMYSQLクライアント端末以外のMYSQLを使用しています。
  2. 私はJNDIデータソースを使用するためにtomcatにアプリケーションをデプロイしていないので、DBCP2からの私の接続はすべてアイドルです。 timeBetweenEvictionRunsMillis = "180000"は、これらのアイドル状態の接続を削除していません。
  3. 私が削除するときminIdle = "5"。その後、180000ミリ秒後に30個のMYSQL接続がすべて接続プールから削除され、接続プールサイズはゼロになります。

この現象を理解してもらえたら助かります。ありがとうございます。

答えて

0

ごめんなさい。それは私の理解の間違いでした。すでに使用していたTomcat 8.5.16には、webappsディレクトリ(ROOT、docs、examples、host-manager、managerなど)に6つのアプリケーションがあります。 Tomcatのconfディレクトリにあるcontext.xmlにApache DBCP2 JNDIデータソースを作成して以来、Tomcatはwebappsディレクトリの各アプリケーションに対してinitialSize = "5"という6つの接続プールを作成しています。 JNDIのデータソース設定を再訪して、1つのアプリケーションで使用するように制限する必要があります。
お世話になりました。

+0

あなたが** a)**これらのデフォルトアプリケーションが必要な場合(本番ではおそらくそうではありません)、** b)**すべて*アプリケーション用の明示的にcontext.xml内の接続プールを宣言します、** c)**は、いくつかの非手術的な接続を開いていることによるパフォーマンスの影響がないかどうかを気にします。 –

関連する問題