6

Hirbernate kullanarak ağır yüklü java uygulamasına sahibim. Ve ben bağlantı havuzu DBCP olarak kullandım, ancak bağlantı kaybı ile ilgili sorunlar vardı. Ben daha c3p0'a geçtim. Ama şimdi bazen iş parçacığını karıştırıyor ve nedenini bilmiyorum. Burada gibi:Veritabanı bağlantısı havuzu kitaplığı için en iyi seçim nedir? (c3p0 problemi)

"[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) 

' My StackTrace dökümü bir süre sunucusu tamamen engellendi yüzden Konuyu, kilidin < 0x00007fa7286d9728> ile, bütün diğer konuları bloke ettiğini gösterdi. Bu iplik ne kadar sürüyor, eğer bir iplik uzun süre boyunca diğer tüm dişleri engelliyorsa, ya da bu iplik tarafından tüketilen süre çok uzunsa, ancak sonuçta, sistemimin tamamen bloke oldu ve aşırı yavaşlatıldı. Çok çalıştım ama bu sorunu nasıl çözeceğimi bilmiyorum. Bağlantıyı kapatmak ve mümkün olan en kısa sürede sırtını bitirmek için havuza ihtiyacım var. Başka bir bağlantı havuzunu kullanmalı mıyım? Benim için bu havuz kütüphanesinin% 100 tasarruf, kilitlenme, can kaybı, açlık, hatta diğer kütüphanelerden biraz daha yavaş olmasının mutlak bir gerekliliği var. Ne demek herhangi bir yardım

+0

Eski bir iş parçacığı için kusura bakmayın ama bir süre önce konuyla ilgili çok az araştırma yaptım: http://stackoverflow.com/questions/5640146/java-jdbc-connection-pool-library-choice-in- 2011 –

cevap

1

1) için

sayesinde DBCP içinde kaybetme bağlantısı hakkında ne dedi? MySQL kullanıyor musunuz? Bir süre herhangi bir aktivite olmasaydı, MySQL ile çalışarak bağlantıyı kaybetme sorununu biliyorum. Senin davan mı?

2) Yüksek yüklü uygulamada Hazırda Bekletme özelliğini kullanmak çok iyi bir seçim değildir. Hazırda bekletme çok karmaşık ve karmaşık veri ve ilişkilerde özellikle yavaştır (örneğin, sadece veri almak istediğimiz bile her oturumda işlem gerekir)

3) Nedeni çok fazla gerekli konu olabilir ve havuzda yeterince konu olmayabilir ?

Yüklü projeye katıldım. Hibernate'i yumuşak verilere (çok fazla sayıda eşleşmeyen çok sayıda kayıttan oluşan çok sayıda talep oluşuyordu) ve ağır veri için JDBC üzerinde kendi kendine yazılan bir sarıcı olarak kullanıyoruz (sert elle eşleme ile SP aracılığıyla binlerce kaydın çok fazla talebi yok). Ve uzun süre hareketsiz kalma süresinden sonra MySQL veritabanlarına bağlantı kaybetmek dışında DBCP ile ilgili herhangi bir sorun yaşamadık.

3

BoneCP - http://jolbox.com'a bir göz atmak isteyebilirsiniz.

C3P0/DBCP'den çok daha iyi performans ve şimdiye kadar herhangi bir kilitlenme bildirisi yok.

+0

BoneCP artık çok fazla gelişme görmüyor ve bununla ilgili sorunları çok daha fazla bağlantı yaratıyor. Geliştiricinin üzerinde çalışmaya devam ettiği için C3P0'a geri dönmeyi düşünüyoruz. – leebutts

+0

BoneCP geliştirme yeniden başlatıldı. – wwadge

+0

Duyduğumuza sevindim, Tomcat havuzunu kullanmaya başladığımız süre içinde şimdiye kadar iyi bir iş çıkarıyor gibi görünüyor. – leebutts