nov
20
2010

Profiling applicazioni PHP con Xdebug – parte 1

closeQuesto articolo è stato pubblicato 1 anno 5 mesi 28 giorni giorni fa quindi alcuni contenuti o informazioni presenti in esso potrebbero non essere più validi. Questo sito non è responsabile per eventuali errori causati da questo problema.

Molti di voi conosceranno Xdebug come strumento per effettuare il debug delle vostre applicazioni PHP. Ma Xdebu è utilizzabile anche come strumento di profiling.

In questa prima parte dell’articolo vedremo una breve descrizione del profiling e come installare e configurare Xdebug.

Cos’è il profiling

Con profiling si intende quell’attività dell’ingegneria del software che permette di analizzare in profondità il comportamento di un software e recuperare informazioni durante la sua esecuzione. Lo strumento utilizzato per effettuare il profiling, infatti, osserva il comportamente di un software e colleziona dati che contengono tempi di esecuzioni di funzioni e metodi e numero di chiamate per ogni funzione e metodo. Grazie all’analisi di questi dati si possono ottenere informazioni più importanti come la profondità delle chiamate (chi chiama chi), la memoria occupata ad ogni chiamata, i valori medi di durata, ecc.

Tutti questi dati in pasto ad un programma di analisi permette di tirare fuori interessanti statistiche e grafici riguardo al software che stiamo analizzando.

Perché il profiling

Il principio di base è questo: “se conosci i blocchi di codice che vengono invocati più spesso sai cosa devi ottimizzare prima”. Infatti il profiling viene di solito effettuato alla fine: quando l’applicazione è completa, attraverso una serie di test pratici, si collezionano questi dati e si fa una “passata” di ottimizzazione in tutti quei punti che potrebbero essere colli di bottiglia.

E’ importante un’attenta operazione di profiling perché a volte si può perdere molto tempo per ottimizzare un ciclo, una query o qualche altro pezzo di codice che si ritiene causa di rallentamenti per poi scoprire che in un uso reale dell’applicazione quello stesso pezzo di codice viene chiamato un paio di volte, mentre c’è una funzione che è invocata centinaia di volta.

Cos’è Xdebug

Xdebug è un modulo per Apache che permette di avere una serie di funzionalità aggiuntive. La più usata è soprattutto quella relativa al debug: le operazioni di stampa di variabili e di stampa dello stack trace vengono in soccorso a tutti i programmatori PHP che ancora inseriscono decine di echo nel loro codice. Xdebug permette infatti di ottenere risultati a video molto dettagliati sulla sequenza di chiamate che ha portato ad un errore oppure di formattare in maniera leggibile e formattata il contenuto di array e oggetti (mostrandone tipi dei dati, lunghezza, ecc.).

Ma non è del suo uso come debugger che vi voglio parlare bensì di quello di profiler. Pochi sanno che Xdebug permette la raccolta dei dati di cui parlavamo sopra, durante l’esecuzione di un’applicazione php per poi generare dei file di log in formato Cachegrind.

Essendo un modulo di apache, la sua presenza lato server consente di accedere a informazioni dettagliate durante il caricamento di ogni pagina, la creazione di ogni oggetto, l’invocazione di ogni metodo, ecc.

Come installare Xdebug

L’installazione è molto semplice. In base al vostro sistema operativo potete decidere di:

  • scaricare il file binario dal sito ufficiale;
  • utilizzare il pacchetto fornito dalla vostra distribuzione linux;
  • installarlo tramite pecl con il comando: pecl install xdebug

Nella documentazione ufficiale ci sono maggiori dettagli a riguardo. Se siete utenti linux vi consiglio l’installazione del pacchetto fornito dalla vostra distribuzione. Semplice e veloce.

Come configurare Xdebug

Una volta scaricato Xdebug dobbiamo dire ad Apache che vogliamo utilizzarlo. Per fare ciò bisogna modificare il file php.ini del nostro webserver e aggiungere la riga contenente il path del file di Xdebug.

Ad esempio, nel mio caso, su distribuzione ubuntu dovremmo aggiungere alla fine del file php.ini qualcosa del genere:

zend_extension=”/usr/lib/php5/20090626+lfs/xdebug.so

Ovviamente sostituite al mio path il path corretto sulla vostra macchina. Se non sapete dove si trova il file in questione potete cercarlo col comando:

locate xdebug.so

Una volta aggiunta questa riga dobbiamo abilitare il profiler. Di default è infatti disabilitato. La presenza del profiler rallenta le prestazioni dei vostri programmi e dovete quindi attivarlo solo quando volete effettuare l’operazione di profiling. Terminata la quale dovreste di nuovo disattivarlo.

Per attivare il profiler dobbiamo aggiungere ancora un’altra riga al file php.ini:

xdebug.profiler_enable = 1

Dopo averlo attivato dobbiamo indicare in quale cartella saranno salvati i file di log. Assicuriamoci che la cartella in questione abbia i permessi in scrittura per apache:

xdebug.profiler_output_dir = “/PATH/DI/ESEMPIO/”

Il file di debug che verrà scritto è chiamato cachegrind.out preceduto da un numero che è l’id del processo php in esecuzione.

Volendo si possono specificare altre opzioni per cambiare il nome del file in output, per far profilare solo alcuni script, ecc. A riguardo, sono indicate, sulla documentazione ufficiale, le altre variabili disponibili per la configurazione di xdebug.

A questo punto abbiamo finito!

Nella parte 2 di questo articolo vedremo cosa viene generato da Xdebug, come leggere i suoi log e come interpretarli.

1 Comment + Add Comment

Leave a comment

*