2010-06-29 64 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