Cómo encontrar memory leaks usando Visualvm

Sospecho que tenemos una importante pérdida de memoria en nuestro puente de conexión ActiveMQ: estamos viendo patrones típicos de fuga de memoria (la aplicación carga bien, se ralentiza si se ejecuta durante periodos prolongados o se reinicia una y otra vez en periodos cortos de tiempo) . Busqué las mejores prácticas modernas para encontrar memory leaks de Java y muchos desarrolladores parecen estar abandonando herramientas tradicionales como jhat / jmap en lugar de la nueva ( jvisualvm ) jvisualvm .

Al iniciar esta herramienta (y pasar unas horas leyendo su tutorial), puedo tomar instantáneas de perfil tanto para la CPU como para la memoria.

Estoy atascado en este punto. ¿Cómo analizo estas instantáneas para identificar la fuga? Hay una gran cantidad de documentación sobre cómo usar jvisualvm para producir instantáneas, pero muy poca documentación sobre cómo darles sentido.

Gracias por adelantado.

Analizar la pérdida de memoria con Visualvm no es tan fácil. Tiene una herramienta / complemento llamado ‘sampler’. Esto se puede usar para muestrear la memoria o la CPU. Puede tomar instantáneas a intervalos regulares y buscar posibles fugas. Aquí hay algunos detalles sobre cómo usarlo Obtenido de la búsqueda rápida

La forma más efectiva será obtener un volcado de stack (por ejemplo, cuando la aplicación se ha ralentizado o cuando ocurre OOM ). VisualVM te ayuda a tomar heapdump (usando Heap Dump en la pestaña Monitor )

Este archivo puede ser analizado por MAT – Algunos detalles están aquí en ¿Cómo analizo un archivo .hprof? y http://memoryanalyzer.blogspot.in/