0

Tomcat 7 で Grails アプリケーションを実行していますが、MySQL 接続の管理に問題があります。

問題は、アプリケーションへの新しい要求 (つまり、ページの読み込み) ごとに新しい MySQL 接続が作成され、これらの接続が閉じられないことです。代わりに、MySQL サーバーがそれ以上の接続の受け入れを最終的に拒否するまで、SLEEP 状態のままになります。したがって、サイトの個々のページを高速でリロードするだけで、多数のデータベース接続を作成できます。

そのため、接続プールが MySQL との接続を十分に速く閉じていないようです。接続プールには多くの構成設定がありますが、この問題を回避するために何を調整する必要があるかわかりません。

これが私の context.xml ファイルからの構成です。

        <Resource name="jdbc/Production" auth="Container" type="javax.sql.DataSource"
            maxActive="100"
            maxIdle="30"
            maxWait="10000"
            minEvictableIdleTimeMillis="1800000"
            timeBetweenEvictionRunsMillis="1800000"
            numTestsPerEvictionRun="3"
            removeAbandoned="true"
            removeAbandonedTimeout="60"
            logAbandoned="true"
            testOnBorrow="true"
            testWhileIdle="true"
            testOnReturn="true"
            validationQuery="SELECT 1"
            username=""
            password=""
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost/Production"
    />

ご提案いただきありがとうございます。

4

1 に答える 1

1

接続プールを定義していません。

次のコードを context.xml に追加します (JNDI データ ソースのようです)。

pooled = "true"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"

JDBC プールを依存関係の構成に含めていない場合はplugins、BuildConfig.groovy のクロージャーに以下を追加します。

compile ":jdbc-pool:1.0.9.3"

他の接続プールを使用することもできますが、JDBC プールをお勧めします。

于 2013-03-11T16:16:32.573 に答える