Il seguente articolo è la quinta parte della serie sull’APM Glowroot. Tratteremo qui la parte di monitoring della JVM.
Ti sei perso le puntate precedenti? Eccole qui:
- Introduzione ai performance monitoring tool – parte 1
- Esempio di un APM open source per un’app web Java J2EE: Glowroot – parte 2
- Glowroot – Profilazione e transazioni web – parte 3
- Glowroot Slow traces – parte 4
Cos’è la JVM – Java Virtual Machine
Per l’esecuzione di un programma Java è necessario effettuare due passaggi:
- il primo è la compilazione del programma. Il risultato della compilazione è un file scritto in un linguaggio vicino al linguaggio macchina, denominato bytecode
- Il secondo è l’interpretazione del programma: il bytecode viene interpretato ed eseguito
La JVM (Java Virtual Machine) è il componente della piattaforma Java che effettua questa seconda operazione. Essa è la chiave della diffusione del linguaggio Java. La disponibilità di implementazioni della JVM su tutti i sistemi operativi garantisce infatti la portabilità di tale linguaggio, che si è presentato al mondo con questo slogan “write once, run everywhere” (scrivi una volta, esegui dappertutto). Sostanzialmente la macchina virtuale realizza un ambiente che nasconde al programmatore le specificità del sistema operativo sottostante e permette di usare lo stesso linguaggio dovunque.
Il monitoring della JVM
La JVM è un ambiente runtime, una macchina virtuale che utilizza memoria e gestisce processi. Essa ha al suo interno una instrumentation tale da permettere il suo monitoraggio. La tecnologia di monitoraggio della JVM si chiama JMX (Java Managment Extension) ed è basata su componenti che si chiamano MBean.
Questa tecnologia permette di “interrogare” gli MBean da qualsiasi client che parli la loro lingua. Sono quindi nate nel corso del tempo moltissime applicazioni in grado di presentare i dati di monitoraggio della JVM. Tra le più conosciute citiamo JConsole e JVisualVM (disponibili direttamente nella distribuzione Java), Eclipse Memory Analyzer, JProfiler…
Anche Glowroot è in grado di interrogare gli Mbean. Il vantaggio di visualizzare i dati della JVM con Glowroot è quello di poter vedere i dati di monitoraggio della JVM interrogando semplicemente un sito web, senza dover aprire un’applicazione desktop sulla macchina. Lo svantaggio è (proprio in quanto sito web) il parco di funzionalità più limitato rispetto ad esempio a JVisualVM o Eclipse Memory Analyzer.
I gauges di Glowroot sulla JVM
Glowroot mette a disposizione dei grafici interattivi che mostrano le più conosciute grandezze della JVM. E’ possibile selezionare più grandezze e vederle contemporaneamente.
Nel grafico sottostante si vede l’andamento dell’utilizzo della heap memory rispettivamente in un’istanza di Web.UP e in un’istanza di Sme.UP Provider durante una giornata. Esse sono state sollecitate 3 volte da test di performance (partiti alle 6.15, alle 12.15 e alle 18.15).
Nota: La heap memory è fondamentale in ambito Java. Ogni volta che in un programma viene creato un qualsiasi oggetto, esso viene sempre memorizzato nello heap.
Heap histogram
Altro grafico interessante è l’heap histogram. Permette di vedere in un dato momento le classi e le rispettive istanze che occupano la heap memory.
Ecco un esempio di heap histogram su un’istanza di Sme.UP Provider durante un test di performance.
Thread dump
Glowroot se opportunamente configurato permette anche di effettuare un thread dump, ovvero una fotografia dei processi attivi nella JVM e di quello che stavano facendo al momento del dump.
Ecco un estratto del thread dump durante un periodo in cui Web.UP non è stato utilizzato. In questo caso i thread sono scarichi, in attesa di fare qualcosa.
In casi critici l’analisi di tutte le grandezze citate è molto utile. Vedremo nei prossimi articoli alcuni esempi di come l’indagine interna alla JVM ha portato alla risoluzione di gravi problemi di performance.
Chiara Zambelli
Responsabile CI/CD – smeup
My LinkedIn Profile
Naviga per categoria:
Seleziona una categoria d’interesse dal nostro magazine