30
2010
Profiling applicazioni PHP con xdebug – parte 2
Questo articolo è stato pubblicato 1 anno 5 mesi 18 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.Nella prima parte di questo articolo abbiamo visto cos’è xdebug, come installarlo e configurarlo per utilizzarlo da profiler delle nostre applicazioni PHP.
L’articolo si era concluso con la generazione di una serie di file di log da analizzare.
Come detto in precedenza i file generati sono nel formato cachegrind. Per analizzarli utilizzeremo Kcachegrind, programma per linux davvero ben fatto. Programmi alternativi possono essere Wincachegrind per windows e webgrind che è una versione webbased cross-plattform.
Vediamo ora come leggere i dati forniti da Kcachegrind.
Aprendo uno dei file di log ci troveremo di fronte ad una schermata di questo tipo:
Formata da tre aree principali:
Profilo piatto
il box più a sinistra, che contiene l’elenco di tutte le funzioni chiamate durante l’esecuzione dello script di cui state effettuando il test. Questo box mostra 5 colonne, facendo doppio click su ognuna di una si potrà ordinare per essa. Il significato di ogni colonna è il seguente:
- Incl. – costo inclusivo della funzione che rappresenta il tempo speso in essa e i suoi figli.
- Proprio – costo esclusivo della funzione che rappresenta il tempo speso in essa (senza i suoi figli).
- Chiamato – il numero di volte che quella funzione è stata chiamata.
- Funzione – il nome della funzione in questione. Le funzioni interne di php si possono riconoscere perché iniziano con il prefisso php::.
- Indirizzo – file nel quale la funzione si trova.
Come è facile intuire, per i primi tre campi le funzioni con valori più alti indicano quelle nelle quali bisogna agire con l’ottimizzazione perché chiamate più spesso o usate di più.
I primi due valori, di default, sono espressi in maniera percentuale rispetto al tempo di esecuzione totale dello script. Se si vuole ottenere il valore assoluto basterà disattivare il pulsante “% relativa” in alto.
In base alla funzione selezionata in questo box cambiano i valori nei due box a destra. Andiamo a vedere cosa significano.
Pannello a destra in alto
contiene le informazioni sulle funzioni che chiamano la funzione selezionata. In questo pannello ci sono 5 schede dal seguente significato:
- Tipi – ripete le informazioni presenti nel box a sinistra.
- Chiamanti – elenca tutte le funzioni che chiamano dalla funzione selezionata. Con i rispettivi costi in termini di tempo (Time) e numero di chiamate (Conteggio). Le stesse informazioni, sono disponibili in forma grafica nel box inferiore sotto la scheda Mappa dei chiamanti.
- Tutti i chiamanti – aggiunge alla scheda precedente, le eventuali funzioni chiamanti a cascata. In questa scheda c’è una voce aggiuntiva, Distanza, che indica, appunto, quanti passaggi intermedi ci sono tra la funzione in questione e quella che la invoca.
- Mappa dei chiamati – mostra graficamente le funzioni chiamate da quella selezionata, mostrando sia le percentuali che il livello di “profondità” delle varie chiamate. Le stesse informazioni che, in forma testuale, si possono trovare nel box in basso sotto la scheda Chiamati.
- Codice sorgente - mostra, quando possibile, il codice sorgente della funzione selezionata.
Pannello a destra in basso
contiene le informazioni sulle funzioni che chiamano la funzione selezionata. In questo pannello ci sono 6 schede dal seguente significato:
- Parti - per il profiling del php è disattivata.
- Chiamati - elenca tutte le funzioni chiamate da quella selezionata. Vengono mostrate le solite informazioni relative a tempo di esecuzione e numero di chiamate. Sono le stesse informazioni che vengono mostrate in forma grafica nel box in alto sotto la scheda Mappa dei chiamati.
- Grafo delle chiamate – mostra con un diagramma di flusso l’ordine delle chiamate (chi chiama chi) a partire dalla funzione selezionata. Utile per individuare loop non previsti. In ogni funzione viene inoltre indicata la percentuale in termini di costo.
- Tutti i chiamati - come per i chiamanti, questa scheda mostra tutte le funzioni chiamate da quella selezionata e le varie chiamate a cascata. Anche qui viene mostrata una colonna aggiuntiva che indica la profondità della chiamata (che a volte può essere un intervallo).
- Mappa dei chiamanti - mostra in formato grafico le informazioni sui chiamanti disponibili nel box in alto sotto la scheda Chiamanti.
- Codice macchina - mostra le istruzioni assembly corrispondenti alla funzione selezionata. Non disponibile per il codice PHP.
Questo è quanto!
Ora spetta a voi far girare il vostro codice con il profiler attivato, raccogliere quanti più dati possibili e poi fare le opportune analisi. Ora sapete quali sono le funzioni più chiamate, quelle dove passate più tempo, i cicli che si creano, l’ordine delle chiamate e tutto il resto.
Passate ad ottimizzare il codice ;)

An article by
















[...] schermata di questo tipo: