java memory-leaks profiling jvisualvm

java - Cómo encontrar fugas de memoria usando visualvm



jvm visualvm (1)

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

Al iniciar esta herramienta (y dedicar unas horas a leer su tutorial), puedo tomar instantáneas del generador de perfiles para la CPU y la memoria.

Estoy un poco atascado en este punto. ¿Cómo analizo estas instantáneas para identificar la fuga? Existe 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 usando visualvm no es tan fácil. Tiene una herramienta / plugin llamada ''sampler''. Esto puede ser usado para muestrear memoria o cpu. Puede tomar una instantánea 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 almacenamiento dinámico (por ejemplo, cuando la aplicación se ha ralentizado o cuando ocurre OOM ). VisualVM lo ayuda a tomar heapdump (usando Heap Dump en la pestaña Monitor )

MAT puede analizar este archivo. Algunos detalles están aquí en ¿Cómo analizo un archivo .hprof? y http://memoryanalyzer.blogspot.in/