Неактивные соединения не разрываются быстро

У меня есть приложение, 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 (некоторые журналы или что-нибудь). И как я могу гарантировать, что простаивающие соединения будут идти в ближайшее время, когда они не используются.

0 ответов

Другие вопросы по тегам