Esempio di un APM open source per un’app web Java J2EE: Glowroot – parte 2

glowroot

Se ti sei perso la scorsa puntata di introduzione ai performance monitoring tools leggi qui.

Glowroot

In questo articolo e nei due seguenti dedicati all’argomento dei performance monitoring tool vedremo un esempio di APM open source utilizzabile per applicazioni web Java J2EE. Sia Web.UP che Sme.UP Provider versione web sono applicazioni di questo genere, quindi tale APM può gratuitamente funzionare su di esse per il monitoring delle performance.

L’APM in questione si chiama Glowroot (https://glowroot.org), ha un sito demo ben fatto e inoltre il suo codice è facilmente visualizzabile e scaricabile da https://github.com. L’installazione è semplice e veloce.

Breve introduzione alla profilazione del codice

Se un programmatore volesse analizzare i tempi di esecuzione di un programma da lui scritto la prima e più semplice operazione che potrebbe fare sarebbe quella di inserire un’istruzione di calcolo dell’ora esatta (diciamo con una precisione fino ai millisecondi) all’inizio del suo programma, una di calcolo dell’ora esatta alla fine del programma e una di stampa nei log del tempo di esecuzione ottenuto come sottrazione del primo risultato dal secondo.  

In linguaggio Java, per analizzare le performance del metodo X di una classe A, potrebbe scrivere una cosa di questo genere:

public void metodoX() {

long start = System.currentTimeMillis();

… codice del metodo …

long end = System.currentTimeMillis();

LOGGER.info(“Tempo impiegato dal metodo X della classe A: “ + ((end – start) millisecondi));

}

Dall’analisi dei log potrebbe estrarre statistiche sui tempi di esecuzione del metodo: quante volte viene eseguito, quanto tempo impiega in media, il suo minimo, il suo massimo, etc….

L’inserimento di istruzioni di monitoraggio potrebbe essere scritto in maniere alternative e più eleganti, ad esempio lanciando eventi oppure tramite AOP (programmazione orientata agli aspetti) o intervenendo direttamente sul binario o sul codice compilato…

Diciamo che la profilazione del codice (in inglese conosciuto come code profiling) è proprio il concetto che abbiamo esemplificato: al codice viene aggiunto codice per monitorarlo (tecnicamente questa aggiunta si definisce code instrumentation). E’ come se il codice venisse marcato in determinati punti. A questi marker si può associare la misurazione del tempo ma non solo. Può essere registrato anche il valore della CPU utilizzata, le allocazioni di memoria, la garbage collection…

A seconda del numero dei marker e delle grandezze registrate un profilatore può incidere molto o poco sui tempi di esecuzione di un’applicazione. Potrebbe anche far girare un’applicazione molte volte più lentamente di quanto normalmente farebbe. Ma in caso di problemi di perfomance un caso del genere potrebbe essere comunque utile per aiutare ad analizzare la situazione, ad esempio in un ambiente di test utilizzato esclusivamente dallo sviluppatore per comprendere nel dettaglio cosa genera il problema.

Glowroot possiede una instrumentation di default per moltissime delle librerie e dei framework utilizzati nel mondo Java J2ee (es: hibernate, JAX-RS, JAX-WS, JMS, JSF, JSP, Spring, etc…). Questo significa che se un’applicazione Java utilizza tali librerie i marker sono già presenti e attivi. Inoltre Glowroot permette la instrumentation su qualsiasi classe Java che gira nell’applicazione tramite una semplice pagina web di configurazione.


Chiara Zambelli

Chiara Zambelli
Responsabile CI/CD – Gruppo Sme.UP
My LinkedIn Profile


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *