visual tutorial remote machine java debugging profiling visualvm

java - tutorial - visualvm profiler



¿Por qué el perfil de VisualVM no perfila mi aplicación? (7)

En Linux con VisualVM 1.3.3 tengo que eliminar la configuración local de la aplicación en ~/.visualvm/1.3.3/ para habilitar el Perfilador de CPU y el Muestreador de CPU.

También tenga en cuenta que / usr / bin / jvisualvm contiene una ruta codificada para OpenJDK (establecida con la variable jdkhome ), que parece causar muchos problemas, en comparación con la ejecución con Oracle JDK 1.7.

He creado una aplicación java sencilla de 1 archivo que recorre un bucle, llama a algunas funciones, asigna algo de memoria, agrega algunos números, etc. Ejecuto esa aplicación a través de Run As->Java Application eclipse.

La aplicación en ejecución se muestra en Java VisualVM en Local .

Hago doble clic en esa aplicación y voy a la pestaña Perfilador.

Los ajustes predeterminados son:

Start profiling from classes: my.main.package.**

Do not profile classes: java.*, javax.*, sun.*, sunw.*, com.sun.*

Hago clic en la CPU . Los botones de la CPU y la Memory atenúan. No pasa nada.

El Status dice profiling inactive .

Cuando mi aplicación termina, el Status dice que la application terminated .

¿Qué estoy haciendo mal aquí? ¿Hay algunos ajustes que necesito ajustar? ¿Necesito establecer un indicador de VM cuando lanzo mi aplicación?


Mikaveli, Kuba y Somaiah Kumbera han brindado excelentes soluciones. Solo añadiendo lo que he hecho para que las cosas funcionen.

Primero verifiqué la ubicación C:/users/'username''/AppData/Local/Temp/hsperfdata_''username''

No había ningún archivo nombrado con el ID de proceso de mi programa ejecutándose dentro de eclipse.

Simplemente detuve el programa y agregué el siguiente parámetro a Ejecutar configuraciones del programa ( Ejecutar configuraciones -> Argumentos -> Argumentos de VM )

-Djava.io.tmpdir=C:/users/'username''/AppData/Local/Temp/hsperfdata_''username''

Comencé el programa de nuevo. Todavía no se pudo perfilarlo. Pero ahora tengo un archivo creado para el proceso en el directorio temporal dado.

Entonces, un simple reinicio de VisualVM hizo el truco.


Supongo que el problema se relaciona con la aplicación que se inicia desde Eclipse, esto se debe a que JVisualVM espera encontrar datos en el directorio java.io.tmpdir (normalmente C:/Users/[your username]/AppData/Local/Temp/hsperfdata_[your username] en un sistema Windows).

Supongo que en lugar de en la ubicación normal donde JPS, JVisualVM, etc. lo espera, Eclipse coloca los datos en su propia carpeta temporal.

Si es así, intente invocar JVisualVM utilizando jvisualvm -J-Djava.io.tmpdir=[Eclipse''s temp directory] para decirle explícitamente dónde están esos datos.

Si no puede encontrar la carpeta hsperfdata_$USER , intente ejecutar su aplicación fuera de Eclipse en la línea de comandos habitual de Java.

También tenga en cuenta que hubo un error que afectó a la carpeta temporal (sensibilidad a mayúsculas y minúsculas) que se introdujo alrededor de 1.6.0_23, por lo que tal vez se beneficiaría al actualizar a una versión más reciente de Java 6 (o 7).


También tenga en cuenta que si su aplicación está utilizando una JVM reciente que no es de Oracle, es posible que deba descargar el VisualVM "vanguardista" desde github .

Por ejemplo, el VisualVM incluido con JDK 1.8.0.111 no parece funcionar con el IBM 1.8 JVM. Posiblemente, la IBM JVM se lanzó simplemente después de la Oracle 1.8 JVM, por lo que no fue posible incluir los cambios necesarios en ese momento.


Tuve el mismo problema después de la actualización de Java 1.7.0_45. Tuve que borrar la siguiente carpeta:

C:/users/'username''/AppData/Local/Temp/hsperfdata_''username''

Después de hacerlo, todo funciona a la perfección.


Tuve el mismo problema y ejecutar VisualVM con privilegios elevados (derechos de administrador) resolvió el problema.


Tuve el mismo problema, pero con los siguientes síntomas:

Comencé jetty, con el directorio de trabajo en C: / Users / t852124 / AppData / Local / Temp

Jetty estaba creando el directorio hsperfdata_ pero no configurando un ID de proceso en él

Así que cuando empecé a visualVM, no se pudo obtener ninguna información del proceso de Java.

Resolví esto iniciando Jetty con la opción -Djava.io.tmpdir = C: / temp / java.

Ahora, cuando inicié Jetty, el ID de proceso se creó como un archivo en el directorio hsperfdata_. Así que cuando comencé a visualizarVM, pude ver mi proceso java local