Tomcat数据库连接泄漏

时间:2014-01-29 12:03:37

标签: database tomcat connection memory-leaks pool

您好我们正在使用tomcat 6,context.xml如下所示

<Context>
   <Resource defaultAutoCommit="false" defaultReadOnly="false"
    driverClassName="oracle.jdbc.driver.OracleDriver"
    fairQueue="false" initialSize="${DBPool.initialPoolSize}"
    jdbcInterceptors="ConnectionState;StatementFinalizer"
    jmxEnabled="true" logAbandoned="false" maxActive="${DBPool.maxPoolSize}"
    maxIdle="30" maxWait="30000"
    minEvictableIdleTimeMillis="5000" minIdle="${DBPool.minPoolSize}"
    name="jdbc/BankDBPool" password="${DBPool.bankPassword}"
    removeAbandoned="true" removeAbandonedTimeout="60"
    testOnBorrow="false" testOnReturn="true"
    testWhileIdle="false" timeBetweenEvictionRunsMillis="5000"
    type="javax.sql.DataSource"
    url="${DBPool.jdbcUrl}"
    factory="uk.co.xxxx.encryption.dbcp.DecryptingBasicDataSourceFactory"
    useEquals="false" username="${DBPool.bankUser}" validationInterval="30000" validationQuery="select 1 from dual" />
</Context>

DBPool.maxPoolSize=400
DBPool.minPoolSize=15
DBPool.initialPoolSize=15

问题是我们必须将maxPoolSize设置为非常高,因为它提供的连接不可用Exception。 数据库监视器工具显示连接空闲但似乎无法重用。此应用程序的流量非常低。一天大约10000次点击。

我们正试图找出这里可能存在的问题。

我的所有服务方法都已标记 @Transactional(propagation = Propagation.REQUIRED,readOnly = true或false)

DecryptingBasicDataSourceFactory仅执行返回数据源的工作。 我们正在使用spring和hibernate。

1 个答案:

答案 0 :(得分:0)

问题已解决。显然,其中一种方法缺少@Transactional。另一个变化是将休眠属性中的批量大小从100减少到20.但主要是添加@Transactional来解决问题。