首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库连接池库的最佳选择是什么?(c3p0问题)

问数据库连接池库的最佳选择是什么?(c3p0问题)
EN

Stack Overflow用户
提问于 2010-11-22 19:59:11
回答 2查看 6.4K关注 0票数 6

我有使用hirbernate的重载java应用程序。我曾经使用DBCP作为连接池,但它有连接丢失的问题。然后我就换成了c3p0。但现在它有时会阻塞线程,我不知道为什么。如下所示:

代码语言:javascript
复制
"1343694829@qtp-515693101-1941" 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)

‘我的堆栈跟踪转储显示,这个线程用锁<0x00007fa7286d9728>阻塞了所有其他线程,所以在一段时间内,服务器被完全阻塞。我不确定这个线程会运行多长时间,如果一个线程阻塞了所有其他线程很长时间,或者这个线程消耗的时间非常长,但结果是,我的系统完全被阻塞了,变得非常慢。我谷歌了很多,但我不知道如何解决这个问题。我需要池子来关闭连接并尽快完成踏步。我应该使用其他的连接池吗?对我来说,这是绝对必要的,这个池库是100%保存,没有死锁,生命锁,饥饿,即使它比其他库慢一点。

谢谢你的帮助

EN

回答 2

Stack Overflow用户

发布于 2011-01-14 23:33:48

你可能想看看BoneCP - http://jolbox.com。

比C3P0/DBCP的性能要好得多,到目前为止还没有任何死锁的报告。

票数 3
EN

Stack Overflow用户

发布于 2010-11-22 23:03:21

1)您说DBCP中的连接丢失是什么意思?你使用MySQL吗?我知道,如果在一段时间内没有任何活动,使用MySQL时会失去连接。这是你的案子吗?

2)在高负载的应用中使用Hibernate不是很好的选择。Hibernate体积太大,速度太慢,特别是在复杂的数据和关系上(例如,它在每个会话上都需要事务,即使我们只想检索数据)。

3)可能的原因是线程太多而池中没有足够的线程?

我参与了高负荷的项目。我们使用Hibernate处理软数据(大量请求由几个没有非常复杂映射的记录组成),使用JDBC上的自编写包装器处理繁重数据(不是很多通过SP的数千条记录的硬手动映射请求)。除了在长时间不活动后失去与MySQL数据库的连接外,我们在使用DBCP时没有任何问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4245175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档