30 votos

El perfil Completo de Java la Ejecución del Programa en VisualVM

En Java perfiles, parece que todos (gratis), las carreteras hoy en día llevar a la VisualVM analizador incluye con JDK6. Se ve como un buen programa, y a todos los revendedores cómo puede "fijar a un proceso en ejecución" como una de las principales características. El problema es, que parece ser la única manera de usarlo en un proceso a nivel local. Quiero ser capaz de iniciar mi programa en el analizador, y realizar un seguimiento de su completa ejecución.

He intentado usar el -Xrunjdwp opción se describe en cómo el perfil de inicio de la aplicación con visualvm, pero entre los dos métodos de transporte (memoria compartida y el servidor), ni es útil para mí. VisualVM no parece tener ninguna integración con el ex, y VisualVM se niega a conectarse a localhost o 127.0.0.1, por lo que este último tampoco es bueno. También probé la inserción de una simple lectura de System.in en mi programa para insertar una pausa en la ejecución, pero en caso de que VisualVM se bloquea hasta que se complete la lectura, y no permite el inicio de perfiles hasta después de la ejecución está en marcha. También he intentado buscar en el plugin de Eclipse , pero el sitio web está lleno de enlaces muertos y el launcher solo se bloquea con un NullPointerException cuando trato de usar.

Proveniente de C, esto no parece una tarea particularmente difícil para mí. Solo estoy perdiendo algo o es esto realmente una exigencia imposible? Estoy abierto a cualquier tipo de sugerencias, incluyendo el uso de diferentes (también gratis) analizador, y yo no soy reacio a la línea de comandos.

19voto

Amir Afghani Puntos 17519

Considere el uso de HPROF y abrir el archivo de datos con una herramienta como HPjmeter - o simplemente leer el archivo de texto resultante en su editor favorito.

Command used: javac -J-agentlib:hprof=heap=sites Hello.java

SITES BEGIN (ordered by live bytes) Fri Oct 22 11:52:24 2004
          percent          live          alloc'ed  stack class  rank   self  accum     bytes objs     bytes  objs trace name
    1 44.73% 44.73%   1161280 14516  1161280 14516 302032 java.util.zip.ZipEntry
    2  8.95% 53.67%    232256 14516   232256 14516 302033 com.sun.tools.javac.util.List
    3  5.06% 58.74%    131504    2    131504     2 301029 com.sun.tools.javac.util.Name[]
    4  5.05% 63.79%    131088    1    131088     1 301030 byte[]
    5  5.05% 68.84%    131072    1    131072     1 301710 byte[]

HPROF es capaz de presentar el uso de la CPU, de la asignación del montón de estadísticas, y supervisar la contención de los perfiles. Además, también puede reportar completa montón volcados y los estados de todos los monitores y los hilos en el La máquina virtual de Java.

11voto

Vineet Reynolds Puntos 40529

La mejor manera de resolver este problema sin modificar su aplicación, es no utilizar VisualVM a todos. En cuanto al resto de las opciones gratuitas son de que se trate, puede utilizar cualquiera de Eclipse TPTP o el Netbeans analizador, o lo que viene con el IDE.

Si usted puede modificar su aplicación, a suspender su estado mientras se instala el generador de perfiles de VisualVM, es muy posible que, de hacerlo, usando el VisualVM el plugin de Eclipse. No estoy seguro de por qué usted está recibiendo el NullPointerException, ya que parece que funcione en mi estación de trabajo. Tendrás que configurar el plugin de proporcionar la ruta de acceso a la jvisualvm binario y la ruta del JDK; esto se hace por visitar el VisualVM cuadro de diálogo de configuración de Windows -> Preferences -> Run/Debug - > Ejecutar -> VisualVM de Configuración (como se muestra en la siguiente captura de pantalla).

Eclipse VisualVM plugin

Usted también tendrá que configurar la aplicación para iniciar con el VisualVM launcher, en lugar de la predeterminada JDT lanzador.

Toda la aplicación se inicia desde Eclipse, ahora va a resultar en VisualVM seguimiento de los nuevos locales de la JVM automáticamente, siempre que VisualVM ya se está ejecutando. Si usted no tiene VisualVM ejecutando, entonces el plugin de lanzamiento de VisualVM, pero también continuará la ejecución de la aplicación.

Inferencia a partir de la frase anterior, es evidente que tener la aplicación detener en la main() método antes de realizar cualquier tratamiento es bastante útil. Pero, esa no es la razón principal por la suspensión de la aplicación. Al parecer, VisualVM o su plugin de Eclipse para no permitir automáticamente el inicio de la CPU o de la memoria de los perfiladores. Esto significaría que estos generadores tendría que ser iniciado manualmente, lo que requiere la necesidad de suspender la aplicación.

Además, cabe destacar que la adición de los indicadores: -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y al inicio de la JVM no le ayudará en el caso de VisualVM, para suspender la aplicación y la configuración de seguridad de los generadores. Las banderas están destinadas a ayudarle en el caso de generadores que en realidad se puede conectar con el puerto abierto de la JVM, mediante el JDWP protocolo. VisualVM no utilice este protocolo y por lo tanto, se tiene que conectar a la aplicación mediante JDB o un depurador remoto; pero eso no resolvería el problema asociado con el analizador de configuración, como VisualVM (al menos a partir de Java 6 update 26) no permite configurar los perfiladores de suspensión del proceso, ya que simplemente no muestra el Analizador de ficha.

2voto

Esto es ahora posible con el inicio del analizador plugin para VisualVM.

1voto

Tomas Hurka Puntos 2439

El asesoramiento con -Xrunjdwp es incorrecta. Sólo se permite depurador y con suspend=y se espera para el depurador para adjuntar. Desde VisualVM no es depurador, no le ayudan. Sin embargo, la inserción de System.in o Thread.sleep() va a detener el inicio y permite VisualVM para adjuntar a su solicitud. Asegúrese de leer Perfiles con VisualVM 1 y Perfiles con VisualVM 2 para comprender mejor el analizador de configuración. Tenga en cuenta también que en lugar de perfiles, puede usar 'Sampler' ficha en VisualVM, que es más adecuado para la generación de perfiles de todo el java de la ejecución del programa. Como los mencionados, también puede utilizar NetBeans Profiler, que apoyan directamente el perfil de inicio de la aplicación.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: