Неактивные соединения не разрываются быстро
У меня есть приложение, Java-процесс, который работает на JDK 1.8. Мы используем 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
поток evictor должен запускаться каждые 10 секунд и требовать все 8 незанятых соединений. Но на самом деле этого не происходит. В действительности 1 простое соединение обрывается через полчаса до сорока минут.
Как мне отладить это дальше? Есть ли способ узнать, когда запущен поток evictor (некоторые журналы или что-нибудь). И как я могу гарантировать, что простаивающие соединения будут идти в ближайшее время, когда они не используются.