2012-08-09 12 views
9

Sto tentando di utilizzare Eclipse VisualVM launcher. Sembra piuttosto carino, tranne per il fatto che sembra generare un'istanza se VisualVM è troppo tardi per eseguire una profilazione della mia applicazione. La mia applicazione termina l'esecuzione prima che il profiler sia inizializzato anche; una volta avviato, si apre una finestra di errore, che dice: cannot open requested application. Quindi mostra VM che esegue Eclipse (etichettato "org.eclipse.equinox.launcher.Main"). Come posso aspettare per la mia applicazione e fare una corretta profilazione?Errore launcher VisualVM

risposta

8

Conosco questo problema. La soluzione unica del povero uomo che ho sempre venuta in mente è:

  1. impostare un punto di interruzione nel codice sorgente
  2. avviare il programma in modalità debug
  3. Collegare il profiler
  4. lasciare che il programma continui

Ci vuole solo un po 'di tempo per VisualVM per iniettare l'agente di profilatura nella vostra VM e sono abbastanza sicuro che consente solo il profiling remoto.

In alternativa è possibile utilizzare YourKit, è possibile profilare l'applicazione fin dall'inizio. In questo modo l'agente di profilatura viene iniettato all'avvio VM:

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

Sono curioso di sapere perchè VisualVM non offre questa opzione, in quanto la sua tecnicamente possibile. Comunque penso che il trucco di debug sia una buona soluzione all'interno di Eclipse, a meno che tu non sia interessato anche al caricamento della classe ecc.

+0

Non potresti semplicemente Thread.sleep() mentre sta funzionando? –

+0

@RyanAmos Anche questo è possibile, l'ho fatto prima che venissi fuori con la modalità Debug. Non mi è piaciuto passare il tempo insieme a "Timer.sleep", o devi aspettare che "sleep" svanisca o che l'aggancio richieda troppo tempo. –

+0

YourKit è troppo costoso. Grazie per l'aiuto! –

11

Probabilmente è troppo tardi, ma ho avuto lo stesso problema e ho impostato un punto di interruzione e poi ho iniziato la modalità di debug non ha aiutato affatto. Alla fine ho scoperto che VisualVM salva i suoi dati temporanei nella cartella% TMP%/hsperfdata_ [username], sul mio computer Windows quella cartella era C: \ Users \ Jacob \ AppData \ Local \ Temp \ hsperfdata_Jacob per esempio. Si è scoperto che il processo non aveva permessi sufficienti per accedere a quella cartella, quindi ho allentato le autorizzazioni e ora funziona perfettamente. Spero che questo sia utile per qualcuno che ha lo stesso problema!

3

Su Windows, eseguire Eclipse come amministratore.

+0

Questo ha funzionato bene per me su Windows 8. Grazie Andres! –

+0

Prego. – Andres

0

Questa è una soluzione stupida, ma funziona. Ecco qui:

Aggiungi un wrapper ad anello infinito alla tua applicazione, dì "while (true) {your_app}".

I rumori di temporizzazione si compensano anche con il prolungamento del programma.