1

我有一个基于 grails2 的应用程序,它正在使用 tomcat jdbc 池,最近我遇到了池中所有连接都用完的问题,我开始得到:-

org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.apache.tomcat.jdbc.pool.PoolExhaustedException: [http-nio-8443-exec-38] Timeout: Pool empty. Unable to fetch a connection in 10 seconds, none available[size:100; busy:100; idle:0; lastwait:10000].; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.apache.tomcat.jdbc.pool.PoolExhaustedException: [http-nio-8443-exec-38] Timeout: Pool empty. Unable to fetch a connection in 10 seconds, none available[size:100; busy:100; idle:0; lastwait:10000].

我有一些需要大量连接的查询和一些执行大约 2-3 分钟的存储过程,因为我手动从数据源 bean 获取连接:-

currentConnection = dataSource.connection
sqlInstance = new Sql(currentConnection)
sqlInstance.execute(query)
sqlInstance.close()

我已经在标准输出中记录了总的活动连接,我看到没有。活动连接的数量不断上升,并且永远不会下降,然后达到 100,这是允许的总活动连接,然后我开始遇到 poolexhaustauion 问题,谁能给我一个想法,我可能缺少什么或连接在哪里可能会泄漏。这是我的连接详细信息:-

dataSource {
    pooled = true
    driverClassName = "com.mysql.jdbc.Driver"
    url="jdbc:mysql://something:3306/something?zeroDateTimeBehavior=convertToNull&autoReconnect=true&relaxAutoCommit=true"
    username="#####"
    password='#$#$$$$$$$'
    dbCreate = "update" 
    properties {
        initialSize=5
        maxActive=100
        minIdle=5
        maxIdle=25
        maxWait = 10000
        maxAge = 10 * 60000
        timeBetweenEvictionRunsMillis=5000
        minEvictableIdleTimeMillis=60000
        validationQuery="SELECT 1"
        validationInterval=15000
        testWhileIdle=true
        testOnBorrow=true
        testOnReturn=true
        removeAbandoned=true
        removeAbandonedTimeout=400
        logAbandoned=true
        jdbcInterceptors = "ConnectionState"
        defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED
    }
}
4

0 回答 0