6

Ho un'applicazione java caricata pesante utilizzando hirbernate. E ho usato il DBCP del pool di connessioni, ma ha avuto problemi con la perdita delle connessioni. Poi sono passato a c3p0. Ma ora a volte si blocca e non so perché. Come qui:Qual è la scelta migliore per la libreria di pool di connessioni al database? (Problema 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) 

' mio discarica stacktrace ha dimostrato che questa discussione bloccato tutti i miei altri thread, con serratura < 0x00007fa7286d9728>, quindi in un server mentre è stato completamente bloccato. Non sono sicuro di quanto tempo venga eseguito questo thread, se un thread sta bloccando tutti gli altri thread per un lungo periodo di tempo, o se il tempo consumato da questo thread è stato estremamente lungo, ma il risultato è stato che il mio sistema è stato completamente bloccato ed estremamente rallentato. Ho cercato spesso su Google, ma non so come risolvere questo problema. Ho bisogno di piscina per chiudere la connessione e finire il battistrada il prima possibile. Dovrei usare qualche altro pool di connessione? Per me è assolutamente necessario che questa libreria di pool sia al 100% salvata, senza deadlock, lifelocks, starvations, anche se è un po 'più lenta di altre librerie.

Grazie per qualsiasi aiuto

+0

Ci scusiamo per aver imbastito un thread precedente, ma qualche tempo fa ho fatto alcune ricerche sull'argomento: http://stackoverflow.com/questions/5640146/java-jdbc-connection-pool-library-choice-in- 2011 –

risposta

1

1) Che cosa si intende quando dicono di connessione perdere in DBCP? Usi MySQL? Conosco un problema con la connessione che perde con il lavoro con MySQL se non ci sono attività da qualche tempo. È il tuo caso?

2) Utilizzare Hibernate nell'app con carico elevato non è una scelta molto buona. L'ibernazione è troppo voluminosa e lenta soprattutto su dati e relazioni complessi (ad esempio è necessaria la transazione su ogni sessione anche se vogliamo solo recuperare i dati)

3) Può essere la ragione è troppo thread necessari e non abbastanza thread nella piscina ?

Ho partecipato a un progetto con carico elevato. Usiamo Hibernate per dati soft (molte richieste sono costituite da diversi record che non hanno una mappatura molto complessa) e wrapper auto-scritto su JDBC per i dati pesanti (non molte richieste di migliaia di record tramite SP con mappatura manuale complessa). E non abbiamo avuto alcun problema con DBCP eccetto perdere la connessione ai database MySQL dopo un lungo periodo di inattività.

3

Si potrebbe desiderare di dare un'occhiata a BoneCP - http://jolbox.com.

Prestazioni molto migliori rispetto a C3P0/DBCP e nessuna segnalazione di nessun deadlock finora.

+0

BoneCP non sta ricevendo molto sviluppo e stiamo avendo problemi con esso creando molte più connessioni di quanto dovrebbe. Stiamo pensando di tornare a C3P0 mentre lo sviluppatore ha ripreso a lavorarci. – leebutts

+0

Lo sviluppo BoneCP è stato riavviato. – wwadge

+0

Buono a sapersi, nel frattempo abbiamo iniziato a utilizzare il pool Tomcat e sembra che stia facendo un buon lavoro finora. – leebutts

Problemi correlati