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) 

' 我的堆棧跟蹤轉儲表明,該線程阻塞我的所有其他的主題,使用鎖< 0x00007fa7286d9728>,所以在一段時間服務器被完全地阻止。我不確定這個線程運行了多久,如果一個線程長時間阻塞了所有其他線程,或者這個線程所消耗的時間非常長,但結果是,我的系統完全被阻塞並且速度極慢。我搜索了很多,但我不知道如何解決這個問題。我需要游泳池來關閉連接並儘快完成步行。我應該使用其他連接池嗎?對我來說,這個池庫是絕對有必要的,它是100%保存,沒有死鎖,生命危險,飢餓,即使它比其他庫慢一點。

感謝你的意思是,當任何幫助

+0

對不起,碰上一個舊的線程,但前段時間我做了一些關於這個問題的小研究:http://stackoverflow.com/questions/5640146/java-jdbc-connection-pool-library-choice-in- 2011 – 2011-04-19 16:48:54

回答

1

1)談談連接在DBCP失去?你使用MySQL嗎?我知道如果在一段時間內沒有任何活動,那麼與MySQL一起工作會失去連接的問題。是你的情況嗎?

2)在高負載應用中使用Hibernate並不是很好的選擇。 Hibernate太大,太慢,特別是複雜的數據和關係(例如,即使我們只想檢索數據,它也需要每次會話都有交易)

3)可能原因是需要太多線程和線程池中沒有足夠的線程?

我參加了高負荷的項目。我們使用Hibernate來處理軟數據(大量的請求由幾個不具有非常複雜映射的記錄組成)和自編寫的JDBC上的重包裝數據(對於通過SP進行數千條記錄的請求,硬手動映射)。而且我們沒有任何DBCP問題,除非在長時間不活動的時間之後失去與MySQL數據庫的連接。

3

您不妨看看BoneCP - http://jolbox.com

比C3P0/DBCP有更好的性能,到目前爲止還沒有任何死鎖報告。

+0

BoneCP不再有太多的發展,我們遇到了問題,創造了比它應該更多的連接。我們正在考慮重新開始C3P0的開發工作。 – leebutts 2012-10-09 00:25:51

+0

BoneCP開發已重新啓動。 – wwadge 2012-11-02 09:40:29

+0

很高興聽到,同時我們已經開始使用Tomcat池,並且到目前爲止它似乎做得很好。 – leebutts 2012-11-23 02:14:16