2012-08-09 27 views
9

Estoy tratando de usar el Eclipse VisualVM launcher. Parece bastante agradable, excepto que parece generar una instancia si VisualVM es demasiado tarde para hacer cualquier perfil de mi aplicación. Mi aplicación finaliza la ejecución antes de que el generador de perfiles esté incluso inicializado; una vez que se inicia, aparece una ventana de error que dice: cannot open requested application. A continuación, muestra la máquina virtual que ejecuta Eclipse (etiquetada como "org.eclipse.equinox.launcher.Main"). ¿Cómo puedo esperar para que mi aplicación y hacer un perfil adecuado?Error de iniciador VisualVM

Respuesta

8

Sé el problema. solución del único hombre pobre que siempre ocurrió con es:

  1. Establecer un punto de interrupción en el código fuente
  2. comenzar su programa en modo de depuración
  3. Conectar el generador de perfiles
  4. dejar que el programa continúe

Simplemente toma un poco de tiempo para que VisualVM inserte el agente de creación de perfiles en su VM y estoy bastante seguro de que solo permite la creación de perfiles remotos.

Como alternativa puede usar YourKit, puede perfilar su aplicación desde el principio. De esta manera se inyecta el agente de perfiles en el arranque VM:

java -agentpath:c:\yourkit\yjpagent.dll FooClass 

Tengo curiosidad por qué VisualVM no ofrece esta opción, ya que su técnicamente posible. De todos modos, creo que el truco de depuración es una buena solución desde dentro de Eclipse, a menos que también esté interesado en la clase de carga, etc.

+0

¿No podría simplemente Thread.sleep() mientras se está resolviendo? –

+0

@RyanAmos Eso también es posible, he hecho esto antes de llegar al modo de depuración. No me gustó sincronizarlo junto con 'Timer.sleep', ya sea que tengas que esperar hasta que 'sleep' desaparezca o la conexión tarde demasiado. –

+0

YourKit es demasiado caro. ¡Gracias por la ayuda! –

11

Esto es probablemente demasiado tarde, pero tuve el mismo problema y establecí un punto de interrupción y luego empecé en el modo de depuración no ayudó en absoluto. Eventualmente descubrí que VisualVM guarda sus datos temporales en la carpeta% TMP%/hsperfdata_ [username], en mi máquina Windows esa carpeta era C: \ Users \ Jacob \ AppData \ Local \ Temp \ hsperfdata_Jacob, por ejemplo. Resultó que el proceso no tenía suficientes permisos para acceder a esa carpeta, así que relajé los permisos y ahora funciona bien. Espero que esto sea útil para alguien que tenga el mismo problema.

3

En Windows, ejecute Eclipse como administrador.

+0

Esto funcionó muy bien para mí en Windows 8. ¡Gracias, Andrés! –

+0

De nada. – Andres

0

Esta es una solución tonta, pero funciona. Aquí va:

Agregue un envoltorio de bucle infinito a su aplicación, diga "while (true) {your_app}".

Los ruidos de temporización también se igualarán a medida que su programa se ejecute más.

Cuestiones relacionadas