2010-06-29 61 views
1

我有一個應用程序,我使用BoneCP進行連接池,並且當我將戰爭部署到tomcat時,它完美地工作。但是,當我創建的另一場戰爭(幾乎是相同的,只是不同的皮膚和數據庫連接)ANS部署他們兩個我碰到下面的錯誤當Tomcat啓動:到數據源的連接太多

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections" 

請注意,這並不是一段時間後發生,所以這並不是說我沒有關閉連接,而是在啓動時泄漏連接。是

我的休眠/ boneCP連接在我的Spring配置屬性如下:

<bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.connection.provider_class">com.jolbox.bonecp.provider.BoneCPConnectionProvider</prop> 
      <prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop> 
      <prop key="hibernate.connection.url">${connection.url}</prop> 
      <prop key="hibernate.connection.username">${connection.username}</prop> 
      <prop key="hibernate.connection.password">${connection.password}</prop> 
      <prop key="bonecp.idleMaxAge">60</prop> 
      <prop key="bonecp.idleConnectionTestPeriod">5</prop> 
      <prop key="bonecp.partitionCount">3</prop> 
      <prop key="bonecp.acquireIncrement">10</prop> 
      <prop key="bonecp.maxConnectionsPerPartition">60</prop> 
      <prop key="bonecp.minConnectionsPerPartition">20</prop> 
      <prop key="bonecp.statementsCacheSize">50</prop> 
      <prop key="bonecp.releaseHelperThreads">3</prop> 
     </props> 
    </property> 
.... 

任何人有什麼想法?

+0

你的mysql服務器可以處理多少個連接?運行查詢'show variables like'max_connections';' – nos 2010-06-29 11:46:20

回答

3

根據this螺紋:

這是你問 BoneCP創造更多的連接,然後 你的mysql服務器配置爲 接受的標誌。要麼增加mysql的連接數 (通過 mysql管理員)或告訴bonecp到 創建更少的連接。

默認情況下,MySQL允許你創建 只有幾個連接,所以我會 從第一個開始。

P.S.抱歉關於驗證碼驗證 - 我獲得的spambot嘗試的數量是 令人難以置信;我要去 把它降到一個檔次。

您必須減少bonecp.maxConnectionsPerPartition,或者修改您的MySQL服務器的配置以接受60 * number of instances of your app同時連接。

2

你創建了3個分區,每個分區最多有60個連接,所以你打mysql的時候有180個連接(默認在mysql遠遠低於這個分區)。

+0

???請參閱(http://stackoverflow.com/questions/14901508/what-are-the-maximum-concurrent-connections-to-a-mysql-database)它說:「你可能會用完內存,文件句柄,和網絡套接字,在你的服務器已經接近這個限制之前。「 – aloplop85 2013-06-26 15:03:05

+0

上面提到的限制是默認值。在2013年我的機器上顯示變量,如'max_connections'; 151.所以,最大數字是每個您提供的鏈接的最大範圍:4,294,967,295(例如2 ** 32 - 1),但它不是默認值。 – Paul 2014-01-03 17:06:40