6

У меня есть загруженное приложение java с использованием hirbernate. И я использовал в качестве пула соединений DBCP, но у него были проблемы с потерей соединений. Затем я переключился на c3p0. Но теперь он иногда блокирует поток, и я не знаю, почему. Как здесь:Какой лучший выбор для библиотеки пула подключения к базе данных? (проблема c3p0)

"[email protected]" prio=10 tid=0x00007fa6b0940000 nid=0x4e12 runnable [0x00007fa6f8f1c000] 
    java.lang.Thread.State: RUNNABLE 
    at com.mchange.v2.resourcepool.BasicResourcePool.doCheckinManaged(BasicResourcePool.java:1258) 
    at com.mchange.v2.resourcepool.BasicResourcePool.checkinResource(BasicResourcePool.java:647) 
    - locked <0x00007fa7286d9728> (a com.mchange.v2.resourcepool.BasicResourcePool) 
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$ConnectionEventListenerImpl.doCheckinResource(C3P0PooledConnectionPool.java:636) 
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$ConnectionEventListenerImpl.connectionClosed(C3P0PooledConnectionPool.java:630) 
    at com.mchange.v2.c3p0.util.ConnectionEventSupport.fireConnectionClosed(ConnectionEventSupport.java:55) 
    at com.mchange.v2.c3p0.impl.NewPooledConnection.fireConnectionClosed(NewPooledConnection.java:510) 
    at com.mchange.v2.c3p0.impl.NewPooledConnection.markClosedProxyConnection(NewPooledConnection.java:381) 
    at com.mchange.v2.c3p0.impl.NewProxyConnection.close(NewProxyConnection.java:1246) 
    - locked <0x00007fa794ccf020> (a com.mchange.v2.c3p0.impl.NewProxyConnection) 
    at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.closeConnection(LocalDataSourceConnectionProvider.java:96) 
    at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:474) 
    at org.hibernate.jdbc.ConnectionManager.cleanup(ConnectionManager.java:408) 
    at org.hibernate.jdbc.ConnectionManager.close(ConnectionManager.java:347) 
    at org.hibernate.impl.SessionImpl.close(SessionImpl.java:325) 
    at org.springframework.orm.hibernate3.SessionFactoryUtils.closeSession(SessionFactoryUtils.java:791) 
    at org.springframework.orm.hibernate3.SessionFactoryUtils.closeSessionOrRegisterDeferredClose(SessionFactoryUtils.java:777) 
    at org.springframework.orm.hibernate3.SessionFactoryUtils.releaseSession(SessionFactoryUtils.java:755) 

' Мой StackTrace свалка показал, что эта нить заблокировала все мои другие темы, с замком < 0x00007fa7286d9728>, так что в то время как сервер был укомплектовать заблокирован. Я не уверен, сколько времени работает этот поток, если один поток блокировал все остальные потоки в течение длительного времени или просто время, затрачиваемое на этот поток, было крайне длинным, но результат был в том, что моя система была полностью заблокирована и сильно замедлилась. Я много гугл, но я не знаю, как решить эту проблему. Мне нужен пул, чтобы закрыть соединение и закончить протекцию как можно скорее. Должен ли я использовать другой пул соединений? Для меня совершенно необходимо, чтобы эта библиотека пула была на 100% сохранена, не была блокировкой, жизненным циклом, голода, даже если она немного медленнее, чем другие библиотеки.

спасибо за любую помощь

+0

Извините, что столкнулся со старой темой, но некоторое время назад я сделал небольшое исследование по этому вопросу: http://stackoverflow.com/questions/5640146/java-jdbc-connection-pool-library-choice-in- 2011 –

ответ

1

1) Что вы имеете в виду, когда говорят о связи проигравшей в ДБХП? Вы используете MySQL? Я знаю, что проблема с потерей соединения с работой с MySQL, если в течение некоторого времени не было никакой активности. Это ваш случай?

2) Использование Hibernate в высоконагруженном приложении - не очень хороший выбор. Hibernate слишком объемный и медленный, особенно для сложных данных и отношений (например, для каждой транзакции требуется транзакция, даже если мы просто хотим получить данные).

3) Может быть, причиной слишком нужны потоки и недостаточно потоков в пуле ?

Я принимал участие в проекте с высокой нагрузкой. Мы используем Hibernate для мягких данных (большое количество запросов состояло из нескольких записей, которые имели не очень сложное отображение) и самописную оболочку над JDBC для тяжелых данных (не так много запросов тысяч записей через SP с жестким ручным сопоставлением). И у нас не было никаких проблем с DBCP, кроме потери связи с базами данных MySQL после длительного времени бездействия.

3

Возможно, вы захотите ознакомиться с BoneCP - http://jolbox.com.

Гораздо лучше, чем C3P0/DBCP, и никаких сообщений о каких-либо взаимоблокировках пока нет.

+0

BoneCP больше не получает большого развития, и у нас возникают проблемы с этим, создавая гораздо больше соединений, чем нужно. Мы думаем о возвращении на C3P0, когда разработчик возобновил работу над ним. – leebutts

+0

Проект BoneCP был перезапущен. – wwadge

+0

Приятно слышать, что мы начали использовать пул Tomcat и, похоже, до сих пор делаем хорошую работу. – leebutts