2008-10-09 17 views
155

Tengo un servidor de producción que se ejecuta con el indicador siguiente: - XX: + HeapDumpOnOutOfMemoryError¿Cómo analizo un archivo .hprof?

Anoche se genera un archivo de java-38942.hprof cuando nuestro servidor encontró un error de pila. Resulta que los desarrolladores del sistema sabían de la bandera, pero no hay manera de obtener información útil de ella.

¿Alguna idea?

Respuesta

156

Si desea una herramienta bastante avanzada para hacer algunas graves hurgando, mira a the Memory Analyzer project en Eclipse, contribuido por SAP.

Algo de lo que puede hacer es alucinantemente bueno para encontrar fugas de memoria, etc - como correr una forma de SQL limitada (NCO) en contra de los objetos en memoria, es decir

toString

SELECT (primerNombre) FROM com.yourcompany.somepackage.User

Totalmente brillante.

+15

Me gustaría agregar un +100 para Eclipse Memory Analyzer. Actualmente estoy tratando de filtrar a través de un archivo de volcado de almacenamiento de 400mb +, y demoré más de 70 minutos en leer el archivo, antes de que causara un bloqueo completo de JVM. EMA puede abrirlo en <5 minutos. –

+2

Demasiado malo MAT a menudo no puede leer montones ... :-( –

+2

Sigo recibiendo errores de análisis al abrir archivos HPROF usando el Eclipse Memory Analyzer (que de hecho también fueron arrojados por Eclipse!). Desafortunado suspiro. –

40

Puede usar JHAT, la herramienta de análisis de montón de Java proporcionada por defecto con el JDK. Es línea de comando pero inicia un servidor/navegador web que utiliza para examinar la memoria. No es el más amigable para el usuario, pero al menos ya está instalado la mayoría de los lugares a los que irá. Una vista muy útil es el enlace "histograma de montón" en la parte inferior.

ejemplo: jhat -port 7401 -J-Xmx4G dump.hprof

jhat puede ejecutar OQL "en estos días", así (enlace inferior "ejecutar NCO")

+2

No puedo aceptar su respuesta hasta que haya actualizado el enlace. –

+0

Hecho, disculpa por el error tipográfico. – CMS

+0

Al parecer, solucionar la respuesta no fue suficiente penitencia para apaciguar al asker ... – rogerdpack

9

Acaba de obtener el Eclipse Memory Analyzer. No hay nada mejor por ahí y es gratis.

jhat sólo es utilizable para aplicaciones "de juguete"

+3

JHAT es necesario para impresionar a los piratas informáticos "l33t" que construyen a mano una distribución BSD comenzando con el LILO. Espera ... nunca usarían Java de todos modos. :-) –

+0

Creo que esto es más que un comentario ...: \ – rogerdpack

28

También puede utilizar HeapWalker del Profiler Netbeans o la herramienta Visual VM autónomo. Visual VM es una buena alternativa a JHAT, ya que es independiente, pero es mucho más fácil de usar que JHAT.

Necesita Java 6+ para usar Visual VM por completo.

+0

Debe agregar una nota que solo sea para Java 6 y 7. –

+0

AFAIK, HeapWalker y VisualVM no requieren Java 6/7 para leer archivos HPROF. –

+0

Acabo de intentar cargarlo con Java 5 y decía 'Por favor, use Java 6 o 7' ¿Qué estoy haciendo mal? –

7

YourKit Java Profiler parece manejarlos también.

Cuestiones relacionadas