Неактивные соединения не разрываются быстро - PullRequest
0 голосов
/ 30 января 2019

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

...