6

Tengo una aplicación java cargada con hirbernate. Y solía usar como grupo de conexiones DBCP, pero tenía problemas con las conexiones de lossing. Luego cambié a c3p0. Pero ahora a veces se bloquea el hilo y no sé por qué. Como aquí:¿Cuál es la mejor opción para la biblioteca de agrupación de conexiones de bases de datos? (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) 

' Mi volcado StackTrace mostró que este hilo bloqueado todos mis otros hilos, con cerradura < 0x00007fa7286d9728>, por lo que en un servidor mientras estaba completamente bloqueado. No estoy seguro de cuánto tiempo se ejecuta este hilo, si un hilo estuvo bloqueando el resto de los hilos durante mucho tiempo, o si el tiempo consumido por este hilo fue extremadamente largo, pero el resultado fue que mi sistema fue completamente bloqueado y extremadamente ralentizado. Busqué mucho en Google, pero no sé cómo resolver este problema. Necesito piscina para cerrar la conexión y terminar la banda de rodadura lo antes posible. ¿Debo usar algún otro grupo de conexión? Para mí, es absolutamente necesario que esta biblioteca de grupo sea 100% segura, sin interbloqueos, líneas muertas, inanición, incluso que sea un poco más lenta que otras bibliotecas.

gracias por cualquier ayuda

+0

Perdón por dar con un hilo viejo, pero hace algún tiempo hice algunas pequeñas investigaciones sobre el tema: http://stackoverflow.com/questions/5640146/java-jdbc-connection-pool-library-choice-in- 2011 –

Respuesta

1

1) ¿Qué quiere decir cuando se dice acerca de la conexión de perder en el DBCP? ¿Usas MySQL? Sé que hay problemas con la conexión al trabajar con MySQL si no hubo actividad durante algún tiempo. ¿Es tu caso?

2) El uso de Hibernate en aplicaciones de alta carga no es una buena opción. Hibernate es demasiado voluminoso y lento, especialmente en datos complejos y relaciones (por ejemplo, necesita transacción en cada sesión, incluso si solo queremos recuperar datos)

3) Puede haber motivos demasiado necesarios y no hay suficientes hilos en el grupo ?

Participé en proyecto de alta carga. Usamos Hibernate para datos blandos (muchas solicitudes consistieron en varios registros que no tenían un mapeo muy complejo) y envoltorios auto escritos sobre JDBC para datos pesados ​​(no muchas solicitudes de miles de registros a través de SP con mapeo manual duro). Y no tuvimos ningún problema con DBCP excepto perder la conexión a bases de datos MySQL después de un largo tiempo de inactividad.

3

Es posible que desee echar un vistazo a BoneCP - http://jolbox.com.

Mucho mejor rendimiento que C3P0/DBCP y no hay informes de ningún bloqueo hasta ahora.

+0

BoneCP ya no está recibiendo mucho desarrollo y estamos teniendo problemas al crear más conexiones de las que debería. Estamos pensando en volver a C3P0 cuando el desarrollador reanudó su trabajo. – leebutts

+0

El desarrollo de BoneCP se ha reiniciado. – wwadge

+0

Es bueno saber que, mientras tanto, hemos empezado a usar el conjunto de Tomcat y parece estar haciendo un buen trabajo hasta el momento. – leebutts

Cuestiones relacionadas