Соединение не освобождено обратно в пул tomcat jdbc - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть приложение на основе 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
    }
}
...