2014-01-24 41 views
1

我正在使用c3p0連接池與Spring(純jdbc,沒有休眠)。這裏是我的池配置c3p0池不縮水

<bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
    <property name="driverClass" value="${jdbc.driver}"/> 
    <property name="jdbcUrl" value="${jdbc.url}"/> 
    <property name="user" value="${jdbc.username}"/> 
    <property name="password" value="${jdbc.password}"/> 
    <property name="acquireIncrement" value="3"/> 
    <property name="minPoolSize" value="3"/> 
    <property name="maxPoolSize" value="25"/> 
    <property name="maxStatementsPerConnection" value="0"/> 
    <property name="numHelperThreads" value="6"/>   
    <property name="testConnectionOnCheckout" value="false" /> 
    <property name="testConnectionOnCheckin" value="false" /> 
    <property name="idleConnectionTestPeriod" value="10"/> 
    <property name="preferredTestQuery" value="select curdate()"/> 
    <property name="maxIdleTime" value="5" /> 
    <property name="unreturnedConnectionTimeout" value="5" />  
    <property name="debugUnreturnedConnectionStackTraces" value="true" /> 
</bean> 

我正在使用JMX監視我的連接池。我發現我的游泳池在負載下增長到25,但從不收縮。我在這裏錯過了一些cofig嗎?

回答

2

默認值是不縮小池。您需要設置maxIdleTimeExcessConnections。從手動(強調):

maxIdleTimeExcessConnections

默認值:0

的秒數,在過量了MinPoolSize的連接應該是 允許被宰殺之前保持在池空閒。 意爲希望積極減少開放 連接數 應用,縮小池背對着了MinPoolSize如果按照 穗,負荷水平減少和後天的連接沒有 不再需要了。如果設置了maxIdleTime,則如果該參數有任何作用,maxIdleTimeExcessConnections 應該更小。 零意味着 沒有執行,多餘的連接不會被閒置。

對於您的池一期高負荷的後縮:

  • 定義一個合理的值了MinPoolSize和maxPoolSize。默認值分別爲3和15,對許多應用程序應該可以正常工作。
  • 設置maxIdleTime的值。我選擇了2700秒(45分鐘),因爲我的應用程序和db服務器之間的思科防火牆在一小時後超時了TCP連接。 C3P0將丟棄閒置時間超過這段時間的連接。
  • 爲maxIdleTimeExcessConnections設置一個值。我選了600秒(10分鐘)。 C3P0將關閉在此段時間內閒置的連接,直到僅打開minPoolSize連接。
+0

按http://www.mchange.com/projects/c3p0/index.html#managing_pool_size 「maxIdleTime定義了連接應在多少秒被允許從池中被淘汰之前不被使用。」 我認爲這是用來從池中刪除空閒連接。 – Pushkar

+0

@Pushkar,當我開始使用c3p0時,我對maxIdleTime參數做了相同的假設。我經歷了監控池大小w/JMX的同樣練習,並沒有看到池縮小。我瞭解到它是maxIdleTime和maxIdleTimeExcessConnections的組合。如果沒有maxIdleTimeExcessConnections,連接可能會被閒置,但它們會立即被新連接取代以保持池大小不變。 –