4

以下の Tomcat JDBC 接続設定があるとします。

<Resource name="jdbc/pc4"
            maxActive="200"
            maxIdle="100"
            minIdle="50"
            initialSize="50"
            maxWait="15000"
            auth="Container"
            type="javax.sql.DataSource"
            username="....."
            password="....."
            testOnBorrow="true"
            testWhileIdle="true"
            validationQuery="select 1"
            driverClassName="com.mysql.jdbc.Driver"
            factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
            url="jdbc:mysql://server_address/db_name?autoReconnect=true&amp;autoReconnectForPools=true&amp;zeroDateTimeBehavior=convertToNull&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;socketTimeout=300000" />

そして、次の MySQL パラメータ:

max_connections = 100000
wait_timeout = 31536000
interactive_timeout = 31536000

接続プールには常に少なくとも 50 のアイドル接続があると予想されます。

しかし実際には、サーバーの起動時に 50 の接続があり、しばらくすると、最後の接続を除くすべての接続が切断されます。

構成に誤りがありますか?

環境:

  • Linux 3.4 64 ビット
  • OpenJDK 7
  • トムキャット7
  • MySQL 5.5
4

4 に答える 4

0

私は MySQL の専門家ではありませんが、Tomcat JDBC を Oracle でしばらく使用しています。アプリがシャットダウンされない限り、アイドル状態の接続はここで維持されます。MySQL で接続ログを確認し、Tomcat JDBC でログを有効にして、実際に接続をシャットダウンしている人を確認します。どちらかがそうです。

于 2013-04-01T10:46:40.327 に答える
0

構成を変更したところ、状況は改善されたようです。現在、接続プールには常に 25 を超える接続があります (理由はまだわかりません)。

 <Resource name="jdbc/pc4"
            maxActive="-1"
            maxIdle="-1"
            minIdle="20"
            initialSize="20"
            maxWait="-1"
            auth="Container"
            type="javax.sql.DataSource"
            username="__"
            password="__"
            driverClassName="com.mysql.jdbc.Driver"
            factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
            testOnBorrow="true"
            testWhileIdle="true"
            testOnReturn="true"
            timeBetweenEvictionRunsMillis="60000"
            minEvictableIdleTimeMillis="60000"
            removeAbandoned="false"
            validationQuery="SELECT 1;"
            url="jdbc:mysql://__/__?autoReconnect=true&amp;autoReconnectForPools=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull&amp;socketTimeout=72000000" />
于 2013-04-04T00:46:50.837 に答える
0

これは mysql の問題です。@Djebelが言ったように、未使用の接続をきれいにしてみてください。1 つの質問ですが、このエラーが発生するたびに mysql サービスを再起動すると、機能し始めますか? また、サーバーのシャットダウン中にすべての接続が閉じられていることを確認してください。Tomcat がそれを行わない場合は、shutdownHook を使用できます。

于 2013-04-01T12:56:25.440 に答える