Pregunta

¿Alguien ha usado el administrador de memoria Eclipse para detectar pérdidas de memoria en los códigos Java? ¿Alguien puede recomendar un buen lugar para buscar información sobre el uso del administrador de memoria? Leí algo en línea, sugiere que necesito dejar que el programa se ejecute hasta que se bloquee (se produce un error de falta de memoria), lo que generará un informe de bloqueo. Luego, use el administrador de memoria para abrir este informe para examinar dónde podría ocurrir la pérdida de memoria. ¿Es así como todos usan el administrador de memoria?

¿Fue útil?

Solución

Aunque -XX: + HeapDumpOnOutOfMemoryError puede ser útil, mi flujo de trabajo actual para usar Eclipse Memory Manager es:

  1. Ejecuta el programa normalmente
  2. Espere a que la memoria se salga de control.
  3. Ejecute jmap : jmap -dump: format = b, file = dump.hprof < PID >
  4. Abra el archivo hprof en EMM.

Por lo general, empiezo a trabajar con el histograma y las vistas del árbol dominador para ver si algo parece fuera de lugar, luego profundizo desde allí.

VisualVM puede ser útil pero parece mucho menos eficiente que EMM cuando se trabaja con un volcado de almacenamiento dinámico (EMM almacena mucha información sobre la carga del volcado de almacenamiento dinámico). Netbeans Profiler es bueno para obtener las ubicaciones de las asignaciones y para la creación de perfiles de tiempo.

Otros consejos

Quizás lo más simple es ejecutar su programa en HProf (viene de serie con la JVM) durante un tiempo y forzar una salida. Con suerte, la salida de HProf debería proporcionarle algunos indicadores inmediatos. su pérdida de memoria.

A diferencia del depurador de memoria Eclipse (que solo conozco de lo que escribe), puede recopilar estadísticas desde cualquier punto de la ejecución.

  

sugiere que necesito dejar que el programa se ejecute hasta que se bloquee (se produce un error de falta de memoria), lo que generará un informe de bloqueo.

No creo que esto sea cierto: no obtendrá un archivo de volcado cuando ocurra un OutOfMemoryError (apuesto a que el autor confunde este problema con algún tipo de error de JVM que podría causar un volcado de núcleo para guardar).

El mejor procedimiento es realizar un volcado de pila utilizando jmap ; esto generará el contenido del montón en un archivo binario (generalmente conocido como archivo hprof). Este archivo puede ser analizado por cualquier número de analizadores:

  • jhat : herramienta Sun que analiza el archivo hprof, inicia un servidor web incorporado para que pueda analizar el montón a través de un navegador web / ver informes. Descubrí que esto es muy lento para grandes cantidades.
  • VisualVM - Depuración impresionante / herramienta de solución de problemas incluida con el JDK. Entre otras cosas, esto también se puede utilizar para generar un volcado de almacenamiento dinámico de cualquier proceso en ejecución, así como un volcado de subprocesos. Sin embargo, he descubierto que también es muy lento cargar archivos hprof grandes.
  • Eclipse Memory Analyzer : complemento de Eclipse que puede generar archivos hprof.

Recomiendo encarecidamente utilizar el complemento Eclipse, ya que es muy rápido cargar grandes volcados de almacenamiento dinámico (> 500MB) (en menos de un minuto), produce informes útiles, admite un lenguaje de consulta con lógica compleja, etc.

Esta página explica cómo trabajar con volcados del montón jvm. Jhat es una forma más simple, aunque menos gráfica, de trabajar con montones, pero también puede cargar los mismos archivos de volcado en el administrador de memoria eclipse. También puede obtener información de jvisualvm, si está utilizando un jvm actual (1.6).

Generalmente prefiero las aplicaciones de creación de perfiles con NetBeans Profiler. Puede ver con bastante facilidad qué objetos tienen fugas y dónde se crean en la mayoría de los casos. Es probable que haya otras herramientas que hagan esto también, pero sé que el generador de perfiles de NetBeans funciona bien y es fácil de usar.

Puede intentar usar Jprobe . Puede supervisar su aplicación y mirar los objetos a medida que se crean. Además, esto ayudará a analizar qué objetos no se acumulan y serán punteros para seguir adelante.

Aunque no es gratis, pero recuerdo que viene con una licencia de prueba, así que verifíquelo.

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