Pregunta

Me las arreglé para obtener una 'pérdida' de memoria en una aplicación java que estoy desarrollando. Al ejecutar mi conjunto de pruebas JUnit, salgo aleatoriamente de las excepciones de memoria (java.lang.OutOfMemoryError).

¿Qué herramientas puedo usar para examinar el montón de mi aplicación java para ver qué está usando todo mi montón para poder averiguar qué mantiene referencias a objetos que deberían ser recolectados?

¿Fue útil?

Solución

VisualVM se incluye en las versiones más recientes de Java. Puede usar esto para crear un volcado de almacenamiento dinámico y mirar los objetos que contiene.

Alternativamente, también puede crear un comando heapdump usando jmap (en su directorio jdk / bin):

jmap -dump:format=b,file=heap.bin <pid>

Incluso puedes usar esto para obtener un histograma rápido de todos los objetos

jmap -histo <pid>

Puedo recomendar Eclipse Memory Analyzer ( http://eclipse.org/mat ) para un análisis avanzado del montón deshecho. Le permite saber exactamente por qué un determinado objeto o conjunto de objetos está vivo. Aquí hay una entrada de blog que muestra lo que Memory Analyzer puede hacer: http://dev.eclipse.org/blogs/memoryanalyzer/2008/05/27/automated-heap-dump-analysis-finding-memory-leaks-with- un clic /

Otros consejos

Si necesita algo gratis, intente VisualVM

De la descripción del proyecto:

  

VisualVM es una herramienta visual que integra herramientas de línea de comandos JDK y capacidades de creación de perfiles ligeras. Diseñado para el uso y el tiempo de producción.

Esta es una pregunta bastante antigua. Mucha gente podría haber comenzado a usar IntelliJ desde que se respondió originalmente. IntelliJ tiene un complemento que puede mostrar el uso de memoria denominado Vista de memoria del depurador JVM .

Utilice un generador de perfiles como JProfiler o YourKitProfiler

Utilice el Eclipse Memory Analyzer

No hay otra herramienta que yo sepa de ninguna herramienta que se acerque a su funcionalidad, rendimiento y precio (libre y de código abierto) al analizar los volcados de pila.

Si está utilizando un sistema que admite GTK, puede intentar usar JMP .

Puede probar el Detector de fugas de memoria que forma parte del conjunto de herramientas JRockit Mission Control. Le permite inspeccionar el montón mientras se está ejecutando la JVM. No es necesario tomar instantáneas todo el tiempo. Simplemente puede conectarse en línea a la JVM y luego ver cómo cambia el montón entre las recolecciones de basura. También puede inspeccionar objetos, seguir referencias gráficamente y obtener rastros de la pila desde donde su aplicación está asignando objetos actualmente. Aquí hay una breve introducción .

La herramienta es de uso gratuito para el desarrollo y puede descargarla aquí .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top