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