私は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を再インストールしましたが、すべてが無駄になりました。