5 de marzo de 2014

Detecta conexiones perdidas (connection leak) a la base de datos en Glassfish 3.1

En ocasiones, una aplicación web deja abiertas conexiones a la base de datos que ya no usará (conexiones perdidas, “connection leak” en inglés). Este error se puede detectar usando las herramientas que tiene Glassfish (lo probé en Glassfish 3.1.2.2). Los pasos son los siguientes.

1. Accede la consulta de Glassfish (normalmente en localhost:4848)

2. Activa la detección de conexiones perdidas en el pool (Resources > JDBC > JDBC Connection Pools > pool > Advanced > Connection Settings > Connection Leak Timeout)



3. Activa el monitor del pool (Monitoring > Action > Configure Monitoring, JDBC Connection Pool > Monitoring Level=HIGH)





4. Accede al monitor del pool (Monitoring Data > View Monitoring Data > Resources)



5. Usa tu aplicación, y detecta cuando el parámetro NumPotentialConnLeak sea mayor a cero.



6. Busca la clase y el número de línea donde ocurrió la pérdida de la conexión (leak) en el stacktrace del hilo de ejecución (thread) en la bitácora del servidor (server > General > View Log Files > Log Viewer Results > Message > details > Complete Message)



7. Arregla el error. :)