0

私はtomcat6でtomcatプールを使用しています。以下は私のリソース定義です。

 <Resource name="jdbc/DBConnectionFactory"
            auth="Container"
            type="javax.sql.DataSource"
            username="root"
         password="root"
        removeAbandoned="true"
        removeAbandonedTimeout="600"
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost/sicad?autoReconnect=true"
               minIdle="3"
       maxActive="250"
       testWhileIdle="true"
       validationQuery="SELECT 1"
            maxIdle="10"
           timeBetweenEvictionRunsMillis="10000"
           minEvictableIdleTimeMillis="10000"
              maxWait="-1"
     />

さて、理想的には250の接続に行った後、すべてのアイドル状態の接続を削除するか、少なくとも何らかの方法でmysqlがあまり多くの接続エラーを出さないようにする必要があります。また、showprocesslistを実行する場合、並行クエリはほとんど実行されないことに注意してください。だから私はtimeBetweenEvictionRunsMillisがアイドル状態の接続を削除してプールを存続させるトリックを行うべきだと考えていました。しかし、250の接続が設定されるとすぐに、mysqlはあまりにも多くの接続エラーをスローし始めます。私は、Tomcatプールが、プールのサイズを適切に保つために、プールからアイドル状態の接続をすべて削除することを期待していました。また、作成されているものがそれほど多くないというわけではないことにも注意してください。

さらに悪いことに、この同じ構成は、開発者のマシンとステージングサーバー+テストサーバーでは機能しますが、製品サーバーでは機能しません。また、すべてのマシンは相互のクローンです。私はマシンを再起動し、mysqlを再インストールしましたが、すべてが無駄になりました。

4

2 に答える 2

0

これをグローバルレベルまたはアプリケーションレベルで構成しましたか?間違った場所に置くと、意図したよりも多くの接続が作成される可能性があることについて、 MarkThomasによるApacheTomcatで避けるべき4つの間違いを確認してください。context.xml短編小説:

  • グローバルでプールを構成すると、context.xmlアプリケーションごとにプールが得られます
  • アプリケーションでプールを構成すると、プールはcontext.xml1つだけになります
  • アプリケーション間でグローバルプールを共有する場合は、リソースリンクを使用する必要があります
于 2012-05-30T05:39:48.543 に答える
0

何も機能せず、最終的にハードウェアを放棄し、同じコードベース、ドライバー、およびmysqlのインストールが機能しました。

于 2012-06-06T02:39:02.470 に答える