2009-07-06 12 views
0

Ich verwende Apache DBCP mit JNDI in meinem Tomcat-Container, um Verbindungen zu einer MySQL-Datenbank zu poolen. Alles funktioniert gut, aber ein Problem, das ich sehe, ist, dass, sobald eine Verbindung zusammengelegt wird, es nie freigegeben wird. Also nach einer Last-Spike-Verbindung sitzen sie für immer schlafen. Ist es eine Möglichkeit, den Pool durch context.xml-Parameter zu verkleinern? hier ist mein ocnfiguration:Wie wird der DB Connection Pool verkleinert?

 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"/> 

Antwort

2

Try minEvictableIdleTimeMillis zu niedrigerem Wert als der Standard festlegen, die 1000*60*30 ist.

+1

Sie müssen auch die folgenden Eigenschaften festlegen: testWhileIdle, timeBetweenEvictionRunsMillis, validationQuery –

1

versuchen c3p0 Verbindung pool` ~~ I JMX Tomcat verwendet habe

+0

In der Tat ist es besser als DBCP, im Moment zumindest. Und die Parameternamen sind einfach zu verstehen. Ihr Beitrag versucht nicht, das Problem zu lösen :). Jedenfalls +1 –

1

In vergleichbaren Situationen verwenden Adapter, um die Einstellungen des Verbindungspools zu zwicken. Dies kann sowohl verwendet werden, um die Größe des Pools zu erhöhen und zu verringern. Es ist daher eine gute Idee, JMX Remote-Zugriff auf den Servlet-Container zumindest in Produktionsumgebungen zu ermöglichen, nur um eine Chance zu haben, auf außergewöhnliche Betriebssituationen zu reagieren.

Verwandte Themen