2009-07-06 7 views
0

J'utilise Apache DBCP avec JNDI dans mon conteneur tomcat pour regrouper les connexions à une base de données mysql. Tout fonctionne bien, mais un problème que je vois est qu'une fois qu'une connexion est mise en commun, elle n'est jamais libérée. Donc, après une connexion de pointe de charge s'asseoir leur sommeil pour toujours. Est-ce un moyen de réduire le pool à travers les paramètres context.xml? voici mon ocnfiguration:Comment réduire le pool de connexions DB?

 defaultAutoCommit="false" 
     defaultTransactionIsolation="REPEATABLE_READ" 
     auth="Container" 
     type="javax.sql.DataSource" 
     logAbandoned="true" 
     removeAbandoned="true" 
     removeAbandonedTimeout="300" 
     maxActive="-1" 
     initialSize="15" 
     maxIdle="10" 
     maxWait="10000" 
     username="user" 
     password="password" 
     driverClassName="com.mysql.jdbc.Driver" 
     url="jdbc:mysql://localhost/mydb"/> 

Répondre

2

Essayez de mettre minEvictableIdleTimeMillis à valeur inférieure à sa valeur par défaut, ce qui est 1000*60*30.

+1

Vous devez également définir les propriétés suivantes: testWhileIdle, timeBetweenEvictionRunsMillis, validationQuery –

1

essayer d'utiliser pool` connexion C3P0 ~~

+0

En effet, c'est mieux que DBCP, pour le moment au moins. Et les noms des paramètres sont faciles à comprendre. Votre message n'essaie pas de résoudre le problème à la main :). Quoi qu'il en soit +1 –

1

Dans des situations comparables, je l'ai utilisé l'adaptateur JMX de Tomcat pour modifier les paramètres du pool de connexion. Cela peut être utilisé à la fois pour augmenter et diminuer la taille de la piscine. Il est donc judicieux d'activer l'accès distant JMX au conteneur de servlet, au moins dans les environnements de production, pour avoir une chance de réagir dans des situations opérationnelles exceptionnelles.