2009-04-01 12 views
10

¿Qué herramientas están disponibles para ver la salida del generador de perfiles JVM incorporado? Por ejemplo, estoy empezando mi JVM con:Herramienta gráfica similar a HPjmeter para ver -agentlib: hprof profiling output

-agentlib:hprof=cpu=times,thread=y,cutoff=0,format=a,file=someFile.hprof.txt 

Esto genera una salida en el hprof ("Java 1.0.1 PERFIL") formato.

He tenido éxito en el pasado usando HPjmeter para ver estos archivos de salida de una manera razonable. Sin embargo, por alguna razón los archivos que se generan utilizando la versión actual de la JVM de Sun no se pueden cargar en la versión actual de HPjmeter:

java.lang.NullPointerException 
    at com.hp.jmeter.f.jb.a(Unknown Source) 
    at com.hp.jmeter.f.a.a(Unknown Source) 
    at com.hp.c.a.j.z.run(Unknown Source) 
Exception in thread "HPeprofDataFileReaderThread" java.lang.AssertionError: null pointer exception from loader 
    at com.hp.jmeter.f.a.a(Unknown Source) 
    at com.hp.c.a.j.z.run(Unknown Source) 

(¿Por qué se ofuscar el código de bytes para un producto libre ?!)

Dos preguntas surgen de esto:

  1. ¿alguien sabe la causa de este error HPjmeter? (EDIT: Sí - ver a continuación)
  2. ¿Qué otras herramientas existen para leer los archivos hprof? ¿Y por qué no hay ninguno de Sun (están allí)?

sé los demás Eclipse TPTP y herramientas pueden controlar los datos JVMTI sobre la marcha, pero necesito una solución que puede procesar los archivos generados hprof después de los hechos, ya que sólo la máquina desplegado tiene un JRE (no un JDK) intalled .

EDITAR: Un desarrollador HPjmeter muy útil respondió a mi question on an HP ITRC forum lo que indica que heap=dump necesidades que deben incluirse en las opciones -agentlib temporalmente hasta que un error en HPjmeter es fijo. Esta información hace HPjmeter viable de nuevo, pero todavía dejaré la pregunta abierta para ver si alguien sabe de otras herramientas.

EDIT: A partir de la versión 4.0.00 de HPjmeter (disponible 05/2009) este error se ha solucionado.

Respuesta

0

No estoy 100% seguro de que funcione (parece que sí) y no estoy seguro de que lo muestre en el formato que desea ... pero ¿ha pensado en el VisualVM?

Creo que abrirá el archivo resultante.

+1

Parece que VisualVM solo carga la información de "volcado de almacenamiento dinámico" (no datos de creación de perfiles) fuera de los archivos y aplicaciones hprof para colgar la carga de dicho archivo de todos modos. ¿Has tenido éxito con esto? Realmente estoy buscando algo> = HPJmeter que funcione :-) –

+0

Lamentablemente no lo he usado todavía ... solo estoy al tanto. ¿Has probado usar Visual VM para hacer el perfil (pero parece que realmente quieres un visor fuera de línea)? – TofuBeer

+0

Sí, ciertamente hay una variedad de herramientas que podría usar para crear un perfil localmente, pero sería bueno tener algo que pudiera mostrar los archivos hprof fuera de línea. HPJmeter está tan cerca, si solo pudiera hacerlo funcionar. Desearía que distribuyeran el código fuente. –

6

Your Kit Java Profiler es capaz de leer hprof snapshots (no estoy seguro si solo para perfiles de memoria o para CPU también). No es gratis, pero es de lejos el mejor perfilador de java que he usado. Presenta los resultados de una manera clara e intuitiva y funciona bien en grandes conjuntos de datos. La documentación también es bastante buena.

+0

De su documentación parecería que solo son compatibles con la memoria porciones relacionadas con el archivo HPROF: http://www.yourkit.com/docs/80/help/hprof_snapshots.jsp - gracias por la referencia; parece un buen generador de perfiles. –

0

He estado usando Eclipse Memory Analyzer para analizar con éxito diferentes problemas de rendimiento. Antes que nada, instale la herramienta como se describe en la página web del proyecto en Eclipse.

Después de eso, puede crear un archivo de volcado saber el PID de la JVM para ser analizada

jmap -dump:format=b,file=<filename>.hprof <jvm_pid> 

A continuación, sólo importa el archivo .hprof en eclipse. Tiene algunos informes automáticos que intentan (para mí generalmente no funcionan) señalar cuáles podrían ser los posibles problemas.

Editar:

Respondiendo al comentario: Tienes razón, es más como un buscador de fugas para Java. Para problemas de rendimiento, he jugado con JRat para proyectos pequeños. Muestra el tiempo calculado por método, la cantidad de veces que se llama un método, la jerarquía de llamadas, etc. El único problema es que, hasta donde yo sé, no admite archivos .hprof. Para usarlo, yo necesidad de ejecutar su programa añadiendo un argumento VM

-javaagent:<path>/shiftone-jrat.jar 

Esto generará un directorio con el perfil capturado por la herramienta. A continuación, ejecute

java -jar shiftone-jrat.jar 

Y abra la traza. Incluso ha sido una herramienta simple, creo que podría ser útil.

+1

Jugué con el MAT hace un tiempo, pero mi recuerdo es que solo analiza la porción HEAP DUMP del archivo hprof, no la parte del perfil de rendimiento. Han agregado eso funcionalmente? –

0

Para ver y analizar la salida de hprof=samples o hprof=cpu, he utilizado PerfAnal con buenos resultados. La GUI es un poco espartana, pero muy útil.

PerfAnal es una descarga gratuita (GPL, originalmente un proyecto de ejemplo en el libro Java Programming on Linux). Ver este artículo:

http://www.oracle.com/technetwork/articles/javase/perfanal-137231.html

para obtener más información y la descarga.

Normalmente sólo se puede ejecutar

java -jar PerfAnal.jar hprof.java.txt 

Es posible que tenga que jugar con -Xmx para grandes archivos hprof.

Cuestiones relacionadas