Java: misurare i tempi di esecuzione delle nostre procedure
Postato da ROb | nella categoria Java, Sviluppo web | mercoledì, 21 luglio 2010
0
Spesso mi sono trovato nella situazione di voler possedere uno strumento che mi permettesse di misurare i tempi di esecuzione di una procedura, di un metodo di una classe o di un semplice blocco di codice.

Tutte le volte mi sono scritto delle apposite funzioni, che facevano la differenza tra la data di fine e la data di inizio della misurazione e poi stampavano il risultato tramite un sistema di logging.
Ieri però, non soddisfatto delle esperienze precedenti, ho cercato un tool che facesse lo sporco lavoro per me, che fosse affidabile e che permettesse di avere un valido report di visualizzazione dei dati raccolti.
Eccomi quindi arrivato, non so come (perché dal nome del progetto non sono chiare le finalità della libreria), a JETM.
JETM è l’acronimo di “Java™ Execution Time Measurement Library” che dichiara di essere “a small and free library, that helps locating performance problems in existing Java applications.”
Per integrarla nelle nostre applicazioni è sufficiente inserire il file jar della distribuzione, chiamato jetm-x-x-x.jar, all’interno del nostro CLASSPATH e fare in modo tale che la configurazione venga inizializzata prima della registrazione delle misurazioni vere e proprie.
Le applicazioni standalone possono inizializzare la configurazione all’inizio del loro ciclo di esecuzione, le applicazioni web possono affidarsi alla configurazione di Spring oppure tramite degli opportuni ContextListener definiti nel file web.xml.
Il codice banale di inizializzazione è:
BasicEtmConfigurator.configure(); monitor = EtmManager.getEtmMonitor(); monitor.start();
a questo punto per poter collezionare una misurazione dobbiamo definire un punto e successivamente determinare la fine della misurazione, in questo modo:
EtmPoint point = monitor.createPoint("Nomedelpuntodicollezione");
// do something...
point.collect();
Il parametro del metodo createPoint serve per distinguere un punto di misurazione da un altro.
Alla fine della nostra applicazione, o quando lo riteniamo più opportuno, possiamo visualizzare i dati collezionati e al termine stoppare il servizio di monitoraggio:
monitor.render(new SimpleTextRenderer(new Locale("it")));
monitor.stop();
Il renderer inizializzato in italiano serve per utilizzare i corretti separatori di decimali e migliaia.
L’output ottenuto dal metodo render assomiglia a qualcosa di questo tipo:

Il tempo calcolato è espresso in millisecondi.
Se vogliamo anche visualizzare l’annidamento delle misurazioni/chiamate possiamo passare il parametro “true” al metodo di inizializzazione della configurazione:
BasicEtmConfigurator.configure();
Per ulteriori informazioni e tutta la documentazione necessaria fate riferimento al sito ufficiale del progetto (http://jetm.void.fm/)







