2012-02-06 23 views
18

Sospecho que tenemos una fuga de memoria importante 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 durante cortos períodos de tiempo). Busqué las mejores prácticas modernas para encontrar fugas de memoria de Java y muchos desarrolladores parecen estar abandonando las herramientas tradicionales como jhat/jmap en lugar de la nueva (er) jvisualvm.Cómo encontrar fugas de memoria usando visualvm

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 de antemano.

+0

¿Ha intentado ejecutar [FindBugs] (http : //findbugs.sourceforge.net) sobre la fuente? Encuentro eso bastante efectivo para identificar código que podría causar pérdidas de memoria. – Jivings

+0

Gracias por la sugerencia, pero hay dos cosas: (1) Me han dicho una y otra vez que FindBugs es bueno para NullPointerExceptions pero no para pérdidas de memoria, y, más importante, (2) realmente quiero familiarizarme con jvisualvm, entonces, a menos que * claramente * no sea la herramienta adecuada para este trabajo, me interesa ver cómo se usa como herramienta de diagnóstico. ¡Gracias de nuevo por la buena sugerencia! – IAmYourFaja

+2

Una pequeña cosa: Herramientas/Complementos/Complementos disponibles: instala Visual GC: el complemento muestra un mejor gráfico de tu memoria de pila y estado de GC. – coolcfan

Respuesta

23

Analizar la fuga de memoria usando 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 quick search

De manera más efectiva será obtener un volcado de pila (por ejemplo, cuando la aplicación se ralentizó o cuando OOM happens). VisualVM ayuda a tomar Heapdump (usando Heap Dump en monitor pestaña)

Este archivo puede ser analizada por MAT - Algunos detalles son aquí en How do I analyze a .hprof file? y http://memoryanalyzer.blogspot.in/

+0

MAT también puede tener un volcado dinámico sin VisualVM – Chin