空闲连接无法快速断开

时间:2019-01-30 17:34:07

标签: java connection-pooling apache-commons-dbcp ojb

我有一个应用程序,一个在JDK 1.8上运行的Java进程。我们将Oracle 12用作数据库,并将commons-dbcp:1.2.2库用于连接池。 这个Java进程是一个多线程应用程序,一旦完成一个线程的数据库查询,它就会释放数据库连接。连接从活动变为空闲。但它会在那里停留30-40分钟,然后再退出空闲状态。

我打印了org.apache.commons.pool.impl.GenericObjectPool的各种属性

numActive = 25
maxActive = 20

numIdle = 8
maxIdle = 20
minIdle = 0

testOnBorrow = true
testOnReturn = false
maxWait = 2000
minEvictableIdleTimeMillis  = 5000 
numTestsPerEvictionRun = 5
softMinEvicatbleIdleTime = -1
testWhileIdle = true
timeBetweenEvictionRunsMillis  = 10000
whenExhaustedAction = grow

根据上述数字,根据GenericObjectPool https://commons.apache.org/proper/commons-pool/api-1.6/org/apache/commons/pool/impl/GenericObjectPool.html

的文档

退出线程应每10秒运行一次,并声明所有8个空闲连接。但是实际上这是没有发生的。实际上,半小时后到40分钟,1个空闲连接被断开。

如何进一步调试?有没有一种方法可以找出退出线程正在运行的时间(某些日志或其他内容)。以及如何确保闲置连接在不使用时很快消失。

0 个答案:

没有答案