Hibernate/c3p0连接泄漏

Kha*_*wal 10 hibernate c3p0

我们正在加载spring/hibernate/c3p0应用程序.当我将c3p0 maxPoolSize减少到远远低于并发用户数时,我们的应用程序就会挂起.日志中没有错误消息,但它也没有继续前进.

我希望应用程序放慢速度,但不要完全停止.

这是我们的c3p0配置:

<bean id="coreDataSource" 
          class="com.mchange.v2.c3p0.ComboPooledDataSource"
          destroy-method="close"
          p:driverClass="${core.jdbc.driver}"
          p:jdbcUrl="${core.jdbc.url}"
          p:user="${core.jdbc.user}"
          p:acquireIncrement="5"        
          p:acquireRetryAttempts="10"
          p:acquireRetryDelay="5000"
          p:initialPoolSize="52"
          p:maxIdleTime="3600"
          p:maxIdleTimeExcessConnections="300"
          p:minPoolSize="52"
          p:maxPoolSize="125"
          p:numHelperThreads="6"
          p:unreturnedConnectionTimeout="0">
          <property name="password">
              <bean class="com.docfinity.util.encryption.SpringStringDecrypter"
                  p:decryptFlag="${core.jdbc.decryptPasswordFlag}"
                  p:encryptedString="${core.jdbc.password}" />
          </property>
    </bean>
Run Code Online (Sandbox Code Playgroud)

如果我扔了160个用户,这将锁定.

我尝试将unreturnedConnectionTimeout设置为正值(120秒),并查看我们的应用程序中显示的堆栈跟踪.堆栈跟踪来自我们的应用程序中的各种不同方法.这并不是说我们可以指出一种方法,并说它正在泄漏连接.

任何帮助调试此问题的人都将非常感激.

Pas*_*ent 12

我怀疑Hibernate或Spring是否正在泄漏连接,我怀疑某个地方的配置问题正在使您的应用程序运行我们的连接.这是我要做的:

  • 降低并发用户数和池大小,我不确定问题是否与负载有关.

  • 设置unreturnedConnectionTimeout为大于0debugUnreturnedConnectionStackTracesto 组合的值,true以确定在何处检出Connections并且不将其返回到池并发布一些生成的堆栈跟踪.

  • 确定出现问题的一个业务流(一个用例场景),并在此方案上运行测试,直到找到问题为止.

另外,我会用一两个堆栈跟踪更新问题,也许有人会发现一些明显的问题.