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.

chronometer

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:

Java(TM) Execution Time Measurement Library

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/)

Formattazione di un numero decimale in Java

Postato da ROb | nella categoria Java, Sviluppo web | martedì, 20 luglio 2010

2

Può capitare di dover modificare i caratteri separatori di decimali e migliaia nella formattazione di un numero in Java.

Questa porzione di codice vi permette di farlo sfruttando alcune classi base di Java:

    		DecimalFormatSymbols symbols = new DecimalFormatSymbols();
    		symbols.setDecimalSeparator('$');
        	symbols.setGroupingSeparator('#');

        	String format = "###,###.###";
        	DecimalFormat formatter = new DecimalFormat(format, symbols);
        	formatter.setGroupingSize(3);

        	String numberString = formatter.format(number);

In questo caso, un pò per gioco, abbiamo impostato il carattere $ come separatore dei decimali e # come separatore delle migliaia.

La classe DecimalFormat formatta il numero sfruttando il pattern specificato in questo “###,###.###”. Il suo costruttore però accetta anche una variabile di tipo DecimalFormatSymbols che può essere inizializzata a partire da uno specifico Locale (avremmo infatti potuto rimpiazzare la chiamata con DecimalFormatSymbols symbols = new DecimalFormatSymbols(new Locale(“it”)); ).

A questo punto la variabile symbols può essere utilizzata per sovrascrivere le impostazioni dell’eventuale Locale utilizzato oppure può essere utilizzato in modo nativo lasciando i separatori di default che, per la lingua italiana, sono tipicamente la “,” come separatore dei decimali e il “.” come raggruppatore della migliaia (non sempre visualizzato).

Installare un Kernel modulare su OVH SP-09 Mini con Ubuntu Server 8.04 64bit

Postato da ROb | nella categoria Linux | giovedì, 1 luglio 2010

0

Questo titolo così specifico e decisamente prolisso, narra di alcune ore di lavoro spese per ricompilare il kernel per un server in hosting presso OVH su cui è stato successivamente installato VMWare Server come software di virtualizzazione.

OVH è un provider, di origine francese, che da alcuni anni opera a livello commerciale e tecnico anche in Italia. Pur presentando un offerta molto vantaggiosa dal punto di vista economico, garantisce un buonissimo livello qualitativo e di prestazioni (ovviamente dal basso della mia piccola esperienza).

Il supporto è sempre pronto e gentile, i server sono affidabili così come i servizi di cui sono forniti (starò forse portando un pò di sfortuna?).

Lasciando però da parte le qualità del servizio di hosting, è interessante dire come, nei server dedicati a disposizione, sia nell’offerta standard (chiamata OVH) che in quella entry level (Kimsufi), è possibile installare e far funzionare correttamente VMWare Server per la creazione e gestione di macchine virtuale.

Tutto questo è possibile grazie al fatto che i kernel delle macchine distribuite sono liberamente ricompilabili, inserendo gli opportuni flag di compilazione necessari, e che è possibile configurare le interfacce di rete, di host e guest, per fare in modo che le due macchine si parlino e che la guest veda il mondo e sia raggiungibile da esso.

Il vantaggio intrinseco di avere in hosting una macchina virtuale sopra a una dedicata è quello di poter un domani fare un upgrade hardware, aumentando RAM e potenza del processore dell’host, senza spendere neanche un minuto nella riconfigurazione del guest e garantendo nello stesso tempo tempi di downtime minimi verso i clienti ospitati nel server virtuale.

Con il servizio dell’ip-failover inoltre, possiamo anche spostare fisicamente il nostro server virtuale da un host a un altro. L’ip assegnato alla macchina virtuale infatti è spostabile a piacere fra i server che abbiamo nel nostro portafoglio prodotti.

In questo articolo non descriverò la procedura ma rimanderò direttamente al post che ho inserito nell’apposito forum di OVH.

Ecco  i passaggi richiesti per l’installazione direttamente dal post nel forum.

I commenti sull’articolo potete postarli qui, quelli sui passaggi dei tutorial direttamente nel forum.