与数据源的连接太多

时间:2010-06-29 11:25:44

标签: mysql tomcat connection-pooling

我有一个应用程序,我使用BoneCP进行连接池,当我将war部署到tomcat时,它运行得很好。但是当我创建另一个战争(几乎完全相同,只是不同的皮肤和数据库连接)和部署它们时,我在tomcat启动时收到以下错误:

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

请注意,在一段时间后不会发生这种情况,因此我不会因为没有关闭它们而是在启动时泄漏连接。

我的spring配置中的hibernate / boneCP连接属性如下:

<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>
....

有人有任何想法吗?

2 个答案:

答案 0 :(得分:4)

根据this帖子:

  

这是你问过的一个标志   BoneCP然后创建更多连接   你的mysql服务器配置为   接受。要么增加数量   连接mysql将允许(通过   mysql管理员)或告诉bonecp   创建更少的连接。

     

默认情况下,MySQL允许您创建   只是几个连接,所以我会   首先从那开始。

     

P.S。抱歉,验证码测试 -   我获得的spambot尝试的数量   打得很难以置信;我要去   把它变成一个档次。

您必须减少bonecp.maxConnectionsPerPartition,或修改MySQL服务器的配置以接受60 * number of instances of your app个并发连接。

答案 1 :(得分:2)

你创建了3个分区,每个分区最多有60个连接,所以你在那里用180个连接命中mysql(mysql中的默认值远远低于那个)。