java profiling

java - yourkit



Creación de perfiles de Java: ¿cómo puedo obtener un método por análisis de método de mi aplicación? (7)

Echa un vistazo a Eclipse TPTP . Pueden proporcionar exactamente eso y mucho más para cualquier aplicación iniciada desde Eclipse.

Quiero ejecutar mi aplicación Java y, para una carga de trabajo determinada, ver:

  • cuántas veces se llamó una función dada
  • cuánto cuesta cada llamada de función en términos relativos (es decir, cuánto tarda en ejecutarse)

Sé ampliamente dónde está el cuello de la botella en mi aplicación, pero necesito una vista de grano mucho más fino para reducirla.

Gracias

Editar jvisualvm se parece a la herramienta: identificó el problema en unos 30 segundos. Solo necesito saber qué significa ''selftime'' en el contexto de un perfil de método. Gracias


El enfoque más simple para un programa que se ejecuta en Java 6 de Sun es utilizar el programa jvisualvm en el jdk. Le permite adjuntar un perfil sin ninguna configuración especial.


Exactamente aquí es donde ayuda AOP. Los aspectos se pueden agregar / eliminar sin cambiar el código. Si está utilizando Spring; cree un aspecto que incluya JoinPoint, consejos que enumeran las clases y métodos públicos que son para evaluar el tiempo de ejecución. Agregue estos frijoles a la configuración de primavera. De lo contrario, utilice el contenedor AspectJ para aplicaciones sin resorte.


Ha habido un par de perfiladores listados (el eclipse y JProfiler). Solo quiero RECOMENDAR ALTAMENTE que un perfilador es una de las herramientas en su caja de herramientas de programación.

Esto es algo que la mayoría de los programadores pasan por alto, pero un generador de perfiles puede resolver clases enteras de problemas que de otra manera son muy difíciles de resolver.

Solo digo (a todos, no solo al interrogador) que si no ha utilizado un generador de perfiles, busque uno, descárguelo y ejecútelo.

Por cierto, son mucho más potentes que la salida estática de las herramientas de Java, aunque las herramientas de Java podrían ser suficientes en este caso específico. Un generador de perfiles puede decirle qué está haciendo cada subproceso y puede hacer algunos gráficos de llamadas bastante interesantes (estilo de diagrama de flujo) que le ayudarán a analizar el código que no escribió.

Solo encuentra uno y úsalo durante una o dos semanas para que sepas lo que ofrece.


Java 1.7 * viene incluido con Java Mission Control (jmc), que tiene la función ''Grabadora de vuelo'' que se puede usar para perfilar la ejecución del método. Los resultados de los perfiles se muestran casi similares a AppDynamics: es fácil detectar los problemas de rendimiento (especialmente los métodos que consumen toda la CPU).

Aunque no está detallado, pero es una buena publicación en el blog que explica acerca de la grabadora de vuelo: http://hirt.se/blog/?p=364

* No estoy seguro de la versión menor.


La forma más fácil es usar -prof, por ejemplo: java -prof -jar yourjar.jar

Eso imprimirá un archivo llamado java.prof después de que el programa haya terminado de ejecutarse.

Ver la página de documentación de HPROF.

En mi aplicación utilizo: -Xrunhprof: cpu = samples, thread = y, doe = y

Esto imprime un informe que contiene, entre otras cosas, esto:

CPU SAMPLES BEGIN (total = 55110) Sun Feb 7 17:02:51 2010 rank self accum count trace method 1 69.68% 69.68% 38399 300361 java.net.SocketInputStream.socketRead0 2 24.40% 94.08% 13448 300386 java.net.SocketInputStream.socketRead0 3 0.20% 94.28% 108 300425 java.io.FileOutputStream.writeBytes 4 0.19% 94.47% 107 300976 java.net.PlainDatagramSocketImpl.receive0 5 0.19% 94.65% 102 300414 package.BlockingSampleBuffer.addSample 6 0.16% 94.82% 90 300365 java.net.SocketOutputStream.socketWrite0 7 0.16% 94.98% 89 300412 package.BlockingSampleBuffer.addSample 8 0.15% 95.13% 84 300430 java.lang.Object.wait 9 0.14% 95.27% 77 300592 java.io.FileOutputStream.writeBytes 10 0.14% 95.41% 76 300566 java.lang.AbstractStringBuilder.<init>

Así que puedes ver el tiempo total (en segundos) empleado en varios métodos. En mi caso, la aplicación pasa la mayor parte del tiempo esperando datos de un host remoto (no es improbable a través de una conexión a Internet).


Si estas dispuesto a gastar un poco de dinero,

JProfiler: http://www.ej-technologies.com/products/jprofiler/overview.html

es muy bueno, muestra el% de tiempo utilizado, el tiempo absoluto utilizado y el número de invocaciones hasta el nivel de método. Entiende las llamadas de EJB, las llamadas de servicio web e incluso mostrará el SQL de las llamadas jdbc. Lo uso con frecuencia para encontrar problemas de rendimiento.

También tiene un perfil de memoria, pero me parece mucho más útil el perfil de la CPU.