Bonecp создает больше потоков bonecp-pool-watch-thread и bonecp-keep-alive-scheduler

Мы создаем соединение с БД, используя JNDI с BoneCP пулом соединений. Через некоторое время bonecp создаст больше com.google.common.base.internal.Finalizer, bonecp-pool-watch-thread и bonecp-keep-alive-scheduler активных потоков. Так что требуется больше памяти. Это приводит к сбою JVM.

Как исправить эту проблему? Любая конфигурация для управления количеством потоков.

Название: BoneCP-pool-watch-thread

State: WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@42256c51 
Total blocked: 0 Total waited: 1 

Stack trace: 
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) 
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043) 
java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:374) 
com.jolbox.bonecp.PoolWatchThread.run(PoolWatchThread.java:64) 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
java.lang.Thread.run(Thread.java:744)

Имя: com.google.common.base.internal.Finalizer

State: WAITING on java.lang.ref.ReferenceQueue$Lock@7035679c 
Total blocked: 0 Total waited: 1 

Stack trace: 
java.lang.Object.wait(Native Method) 
java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135) 
java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151) 
com.google.common.base.internal.Finalizer.run(Finalizer.java:131) 
java.lang.Thread.run(Thread.java:744)

Название: BoneCP-keep-alive-scheduler

State: TIMED_WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@327a219f 
Total blocked: 0 Total waited: 5 

Stack trace: 
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226) 
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2082) 
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1090) 
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:807) 
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068) 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
java.lang.Thread.run(Thread.java:744)

person SANN3    schedule 21.03.2015    source источник


Ответы (1)


Это связано с ошибкой библиотеки Guava. Однако обратите внимание, что вам следует считать устаревшим BoneCP в пользу HikariCP.

person wwadge    schedule 27.05.2015