2012-02-15 18 views
25

He creado una aplicación simple de 1 archivo java que itera a través de 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 de eclipse.¿Por qué el perfil de Profiler de VisualVM no será mi aplicación?

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

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

Los ajustes por defecto son:

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

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

hago clic en CPU. Los botones CPU y Memory se apagan. No pasa nada.

El Status dice profiling inactive.

Cuando mi aplicación termina el Statusapplication terminated dice.

¿Qué estoy haciendo mal aquí? ¿Hay alguna configuración que deba modificar? ¿Debo configurar un indicador de VM cuando inicie mi aplicación?

+0

@Mikaveli Lo consideraría. Sin embargo, como describí a continuación, en realidad no funcionó. Todavía no he podido usar la opción '-J-D ...' para señalar 'jvisualvm' en algo lanzado desde eclipse. Aprecio tu visión e intento de ayudar, pero lamentablemente no funcionó. También tenga en cuenta que esta pregunta ha sido cerrada. – Luke

+0

Las notas sobre hsperfdata es donde JVisualVM (y otras aplicaciones) obtienen la información del proceso, lo que ayudará a usted y a otros a resolver problemas en el futuro. Si la opción '-J' no funcionó, esto solo puede deberse a que no la ha apuntado al java.io.tmdir real (Eclipse anula la ubicación estándar). Esa es la forma documentada de pasar argumentos de JVM a JVisualVM. El motivo por el que funciona ahora podría relacionarse fácilmente con el error que mencioné (sensibilidad a mayúsculas/minúsculas de la ubicación de la carpeta) que se 'cura' según el caso del nombre de usuario con el que inicie sesión. Vale la pena 15 rep? :) – Mikaveli

+1

No estoy de acuerdo con que esto se cierre, ya que tuve exactamente el mismo problema. Probé las sugerencias aquí sin suerte, y quería agregar mi propia respuesta: es mejor instalar el plugin de Eclipse en http://visualvm.java.net/eclipse-launcher.html. Funcionó para mí –

Respuesta

20

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

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

Si es así, trate de invocar jvisualvm usando jvisualvm -J-Djava.io.tmpdir=[Eclipse's temp directory] a decirle explícitamente en que los datos son.

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

También tenga en cuenta que hubo un error que afectaba a la carpeta temporal (sensibilidad de mayúsculas y minúsculas) introducido alrededor de 1.6.0_23, ¿entonces sería beneficioso actualizar a una versión más reciente de Java 6 (o 7)?

+1

Agradezco su sugerencia. Agregar la opción -J-D a (j) visualvm solo me dio un error que no podía encontrar el proceso java local. Sin embargo, ahora no puedo reproducir mi problema original. El generador de perfiles parece estar funcionando bien para mí ahora ... – Luke

+0

Debe usar el ejecutable 'visualvm' (en la carpeta \ bin). La opción '-J' significa pasar a la JVM; el resto de la sintaxis es exactamente como normalmente agregaría argumentos a su JVM. – Mikaveli

+0

Creo que te refieres a 'jvisualvm' pero sí, eso es lo que hice. Y cuando se inicia, muestra un cuadro emergente de diálogo de error que dice 'No se pueden detectar las aplicaciones Java locales. Me remite a la Guía de solución de problemas de VisualVM para obtener más información y los pasos para solucionar el problema. – Luke

1

que tenían el mismo problema, pero con los siguientes síntomas:

empecé embarcadero, con el directorio de trabajo en C: \ Users \ t852124 \ AppData \ Local \ Temp

embarcadero fue la creación de la directorio hsperfdata_ pero no estableciendo un ID de proceso en él

Así que cuando comencé a visualizarVM, no podía obtener ninguna información del proceso de Java.

Lo resolví iniciando embarcadero con la opción -Djava.io.tmpdir = C:/temp/java.

Ahora cuando empecé embarcadero, el identificador de proceso fue creado como un archivo en el directorio hsperfdata_. Así que cuando comencé VisualVM, fue capaz de ver mi proceso local de Java

32

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

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

Después de hacerlo, todo funciona a las mil maravillas.

+1

Estaba teniendo el mismo problema y simplemente fui a las propiedades de HDD -> limpieza del disco y marqué para eliminar archivos temporales, y ejecuté la limpieza del disco y se encargó del problema. Si no quieres ir a buscar el archivo anterior, esto también servirá. – JonnyD91

+1

@ JonnyD91 gracias por la información. – Kuba

+2

Esta es la única respuesta que funcionó para mí: realmente * eliminar * esta carpeta. – Benj

1

Mikaveli, Kuba y Somaiah Kumbera han proporcionado excelentes soluciones. Solo agregué lo que hice para que las cosas funcionen.

Comprobé primero la ubicación C:\users\'username'\AppData\Local\Temp\hsperfdata_'username'

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

simplemente me detuvo el programa y añade el siguiente parámetro a las configuraciones de ejecución del programa (Ejecutar Configuraciones -> -> Argumentos Argumentos VM)

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

empecé el programa de nuevo. Aún no pudo perfilarlo. Pero ahora tengo un archivo creado para el proceso en el directorio temporal dado.

Luego, un simple reinicio de VisualVM hizo el truco.

0

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 Analizador de CPU y la Muestra de CPU.

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

0

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

0

También tenga en cuenta que si su aplicación está utilizando una JVM reciente que no es de Oracle, es posible que necesite descargar "bleeding edge" VisualVM from github.

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

Cuestiones relacionadas