2013-09-01 16 views
15

Durante la creazione del profilo del tempo di CPU di un'applicazione con VisualVM, è possibile visualizzare una scheda "Struttura chiamate" dopo aver acquisito un'istantanea. Ma nel mio caso, l'albero delle chiamate mostra solo alcune classi e metodi RMI TCP, ma nessuna singola classe della mia applicazione.Come visualizzare la struttura delle chiamate in VisualVM?

Come visualizzare l'albero delle chiamate corretto?

enter image description here

risposta

9

possibilità

  1. Il Profiler impostazioni sono esclusi le classi. Cambia gli escludi nelle impostazioni di Profiler.
  2. L'applicazione era inattiva mentre il profiler era in esecuzione. Collega il profiler quindi fai in modo che il programma esegua il codice che vuoi profilare.
  3. Si potrebbe profilare la JVM sbagliata. RMI rende piuttosto facile chiamare in un'altra JVM. Forse devi profilare l'altro lato di quella connessione RMI.

C'è una casella di controllo "Impostazioni" nella scheda Profiler. Se si seleziona la casella Impostazioni, verrà visualizzato un altro pannello che consente di configurare le classi su cui il profiler raccoglie i dati.

Ecco uno screenshot. screeshot of jvisualvm with Profiler "Settings" box checked.

+0

Grazie per il suggerimento sulle impostazioni. Se clicco sulla casella di controllo, vedo le classi profilate, ma non mi è permesso cambiarle. Le caselle di testo non sono modificabili. Come posso modificarli? –

+0

Ok, capito. Doveva smettere di profilare per modificare le impostazioni. Dopo aver impostato le classi corrette, ho potuto vedere l'albero delle chiamate corretto per la mia applicazione. –

0

L'albero delle chiamate mostra solo le discussioni che in realtà correva durante il campionamento/profilatura (non dormivano per tutto il tempo) e le cui tracce dello stack Non hai ancora filtrata del tutto. Il filtro viene impostato prima di iniziare un campionamento o una profilazione. Quando si attiva la casella di controllo "Impostazioni" nell'angolo in alto a destra è possibile impostare il filtro. Nel caso del campionatore è anche possibile impostare la frequenza di campionamento che è un compromesso tra prestazioni e rischio di sorvegliare lo stato di esecuzione di un thread. Ma potrebbe essere che la tua applicazione fosse davvero inattiva durante la profilazione. Quindi gli unici thread che vedi sono i thread RMI che mantengono la connessione a VisualVM.

2

Come ha detto @Holger, le istantanee del campionatore/campionatore devono mostrare solo i thread in esecuzione. Tuttavia,, ho riscontrato per esperienza personale che le istantanee di campionamento a volte mostrano più thread di quelli di profilazione.

Inoltre, il campionatore di VisualVM consente di vedere il tempo di CPU di ciascun thread in tempo reale (senza scattare un'istantanea), indipendentemente dal fatto che sia in esecuzione, inattivo, in attesa o monitorato.

Non capisco perché questo accada, poiché la profilatura dovrebbe essere più accurata del campionamento (see here the difference), ma lo fa.

Tutto sommato, ti consiglio di provare il campionatore e vedere se funziona.

+0

Grazie. Sì, il campionamento ha aiutato e con il campionamento posso vedere l'albero delle chiamate che volevo vedere. –