XHProfAumentare le prestazioni diun’applicazione PHP attraverso laprofilazione con XHProf.Intesys, 13 Ottobre 2011
Problema: le prestazioni di PHPCome sappiamo PHP è un linguaggio con prestazioni poco elevate, questo perché :- un linguag...
Conoscere gli strumentiEsistono varie tecniche e strumenti per migliorare notevolmente questo aspetto, alcuni servonosolo ...
Che cos’è la profilazione?La profilazione è un sistema di analisi dinamico di applicazioni, i cui dati si ottengono dallee...
Misurare le prestazionidi un’applicazione PHPMolto spesso gli sviluppatori pensano di sapere quali parti della loro applic...
XHProfXHprof è un altro tool, sviluppato da Facebook ed è open source.E un profiler di tipo “a gerarchia di funzioni” scri...
Installazione di XHProfPer installarla:     wget http://pecl.php.net/get/xhprof-0.9.2.tgz     tar xvf xhprof-0.9.2.tgz    ...
Come profilare con XHProfPer profilare un blocco di codice basta inserire le chiamate a 2 funzioni prima e dopo:// inizio ...
Utilizzare linterfaccia di XHProfLinterfaccia che ci verrà mostrata cliccando sul link in fondo alla pagina è una tabella ...
Utilizzare linterfaccia di XHProf                     Intesys Talk
Call GraphUn altro strumento davvero utile è il grafico delle chiamate.XHprof mette a disposizione questa funzione attrave...
Ottimizzazione dellapplicazione.Quando si inizia ad ottimizzare lapplicazione, si deve ordinare la lista delle funzioni in...
Differenze e aggregazione dei reportAltra feature molto utile di XHprof è la possibilità di aggregare più report e vedere ...
ScalabilitàSe si ha la necessità di avere unapplicazione scalabile si devono preventivare degli obiettivi daraggiungere a ...
ScalabilitàZend_ConfigUn esempio su Zend, nello specifico i file di configurazione .ini.Se abbiamo una variabile che si ch...
ScalabilitàZend_ViewUn altro esempio su Zend (il framework che utilizziamo di più).Quando si utilizza un helper della view...
ScalabilitàIdentificare i colli di bottigliaE preferibile, nel report di Xhprof, avere più dati sulle operazioni più lente...
Risorsehttp://pecl.php.net/package/xhprofhttp://xdebug.org/docs/profilerhttp://derickrethans.nl/xdebug-and-tracing-memory-...
Upcoming SlideShare
Loading in …5
×

Profilazione di applicazioni PHP con XHProf.

926 views

Published on

Profilazione di applicazioni PHP con XHProf.

Published in: Education
  • Be the first to comment

Profilazione di applicazioni PHP con XHProf.

  1. 1. XHProfAumentare le prestazioni diun’applicazione PHP attraverso laprofilazione con XHProf.Intesys, 13 Ottobre 2011
  2. 2. Problema: le prestazioni di PHPCome sappiamo PHP è un linguaggio con prestazioni poco elevate, questo perché :- un linguaggio interpretato- non è tipizzatoQuesti 2 fattori fanno sì che le prestazioni siano scarse. Intesys Talk
  3. 3. Conoscere gli strumentiEsistono varie tecniche e strumenti per migliorare notevolmente questo aspetto, alcuni servonosolo a valutare dove migliorare altri intervengono più in profondità.Citazione di Theo Schlossnagle*- Gli strumenti sono solo strumenti- Sono essenziali per fare bene il tuo lavoro- Non potranno mai fare il lavoro al posto tuo- Non potranno mai rimpiazzare esperienza e disciplina- Possono aiutarti a tenere disciplinato il tuo lavoroAbbiamo strumenti come i profilatori (PHPSpeed, XHProf, ecc.),che servono a misurare le prestazioni;mentre abbiamo altri strumenti come quelli per il caching(MemCache, xCache, ecc.) oppure di modifica del codicecome Facebook Hip Hop (prende codice php e lo compila in C++, aumento delle prestazionidella cpu del 50%). * CEO di OmniTI Intesys Talk
  4. 4. Che cos’è la profilazione?La profilazione è un sistema di analisi dinamico di applicazioni, i cui dati si ottengono dalleesecuzioni dellapplicazione.Lobiettivo di questo tipo di analisi è di determinare quali sezioni dellapplicazione sono daottimizzare, aumentando la velocità complessiva odiminuendo lutilizzo di memoria, o magari entrambi. Intesys Talk
  5. 5. Misurare le prestazionidi un’applicazione PHPMolto spesso gli sviluppatori pensano di sapere quali parti della loro applicazione la rende lentae spendono molto tempo nellottimizzazione di quella parte ma magari capita che il collo dibottiglia si trova da qualche altra parte.Per evitare questo problema si possono utilizzare degli strumenti detti profilatori.Di questi strumenti ne esistono parecchi, soprattutto per PHP, il più utilizzato è Xdebug checombinato con WinCacheGrind permette di mostrare il grafico delle chiamate e il tempo spesoper ogni funzione. Intesys Talk
  6. 6. XHProfXHprof è un altro tool, sviluppato da Facebook ed è open source.E un profiler di tipo “a gerarchia di funzioni” scritto in C.E dotato di uninterfaccia grafica per la presentazione dei dati raccoltiPermette di avere anche uno storico delle profilazioni raccogliendo i dati in una tabella deldatabase.Al momento le versioni ufficiali del tool sono solo per Linux e FreeBDS.Esiste una versione per Windows, ma sembra che non sia veritiera nei report come le versioniper i sistemi Unix. Intesys Talk
  7. 7. Installazione di XHProfPer installarla: wget http://pecl.php.net/get/xhprof-0.9.2.tgz tar xvf xhprof-0.9.2.tgz cd ./xhprof-0.9.2/extension/ phpize ./configure --with-php-config=/usr/local/bin/php-config make make install make testPoi bisogna abilitare lestensione all’interno del file php.ini [xhprof] extension=xhprof.so xhprof.output_dir="/var/tmp/xhprof"Successivamente si fa solo un semplice restart di apache. Intesys Talk
  8. 8. Come profilare con XHProfPer profilare un blocco di codice basta inserire le chiamate a 2 funzioni prima e dopo:// inizio profilazionexhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);// codice da profilare// fine profilazione$xhprof_data = xhprof_disable();La funzione xhprof_enable() accetta varie opzioni per controllare cosa profilare. Di default vengonoprofilati sia il numero di chiamate delle funzioni che il tempo di esecuzione.Si possono aggiungere anche le misurazioni relative alla memoria e alla CPU usate (attenzione al caricodella cpu).Per problemi di carichi delle risorse, si possono disabilitare le funzioni native di php e lecall_user_functions.// ignore builtin functions and call_user_func* during profiling$ignore = array(call_user_func, call_user_func_array);xhprof_enable(0, array(ignored_functions => $ignore)); Intesys Talk
  9. 9. Utilizzare linterfaccia di XHProfLinterfaccia che ci verrà mostrata cliccando sul link in fondo alla pagina è una tabella con lefunzioni ordinate per tempo di esecuzione esclusivo.I dati che possiamo vedere sono:- numero di chiamate per funzioni- utilizzo di cpu (tempo esclusivo ed inclusivo)- utilizzo della memoria (tempo esclusivo ed inclusivo)- picco massimo di uso della memoria- wall time (tempo di esecuzione reale)Tempo inclusivo e tempo esclusivo.Il tempo inclusivo rappresenta il tempo di esecuzione della funzione stessa e di tutte le funzionidiscendenti.Il tempo esclusivo rappresenta solo il tempo di esecuzione della funzione escludendo il tempodelle funzioni discendenti.Wall timeIl tempo di esecuzione della funzione mentre la CPU ha altri processi in corso. Intesys Talk
  10. 10. Utilizzare linterfaccia di XHProf Intesys Talk
  11. 11. Call GraphUn altro strumento davvero utile è il grafico delle chiamate.XHprof mette a disposizione questa funzione attraverso uno strumento: Graphviz.Ogni rettangolo è una funzione con le statistiche visibili nella schermata precedente.Il colore di sfondo di ogni rettangono indica quale funzione è da ottimizzare. Intesys Talk
  12. 12. Ottimizzazione dellapplicazione.Quando si inizia ad ottimizzare lapplicazione, si deve ordinare la lista delle funzioni in base altempo di utilizzo della CPU perchè quelle sono le funzioni che vanno ottimizzate per prime.E buona norma, dopo aver ottimizzato/refattorizzato le funzioni rilanciare il profiler per vedere iprogressi fatti.Dopo che siamo soddisfatti delle ottimizzazioni fatte ordiniamo per utilizzo di memoria e walltime.Breve sommario per lottimizzazione:- Profila- Ordina per tempo della CPU, utilizzo di memoria e wall time.- Parti dalla cima della lista- Analizza e ottimizza- Rilancia il profiler e misura i miglioramenti- Ripeti ancora, ancora e ancora Intesys Talk
  13. 13. Differenze e aggregazione dei reportAltra feature molto utile di XHprof è la possibilità di aggregare più report e vedere le differenzetra più lanci e quindi i miglioramenti.Ogni lancio è identificato da un ID, per vedere la differenza tra 2 report basta sostituiregli ID nel seguente URL:http://xhprof_address/index.php?run1=XXX&run2=YYY&source=myapp Intesys Talk
  14. 14. ScalabilitàSe si ha la necessità di avere unapplicazione scalabile si devono preventivare degli obiettivi daraggiungere a livello di prestazioni (utilizzo cpu, memoria, tempo di generazione della pagina,ecc.) e conoscere i propri limiti (framework, risorse, macchina sulla quale gira lapplicazione,ecc.).Misurare la baselinePer applicare questo anche a livello di profiler, un buon punto di partenza è la misurazione delleprestazioni di base del framework della nostra applicazione.Questo può essere utile per capire l(in)efficienza del framework e cosa si può ottimizzaredesso. Intesys Talk
  15. 15. ScalabilitàZend_ConfigUn esempio su Zend, nello specifico i file di configurazione .ini.Se abbiamo una variabile che si chiama “error.logger.level”, e si usa Zend_Config per accedereal valore avremo qualcosa del genere:$config­>error­>logging­>levelOgni operatore “freccia” implica 2 chiamate di funzioni, per un totale di 6 chiamate di funzioni?!Pensate se “erroneamente” lasciate questaccesso alla variabile allinterno di un ciclo lo sprecodi risorse. Intesys Talk
  16. 16. ScalabilitàZend_ViewUn altro esempio su Zend (il framework che utilizziamo di più).Quando si utilizza un helper della view lo stack di chiamate è questo:E ancora quando si usa la funzione partial() per renderizzare un template viene clonato loggettoView e annullate tutte le variabili non private.Queste operazioni vengono fatte attraverso funzioni di reflection e ad un sacco di chiamate asubstr().Altri oggetti come i modelli, o le chiamate alla funzione Zend_Json:encode(), mettono a duraprova le prestazioni dellapplicazione.Tuttavia Zend è solo un esempio di framework dalle basse prestazioni su certi componenti. Intesys Talk
  17. 17. ScalabilitàIdentificare i colli di bottigliaE preferibile, nel report di Xhprof, avere più dati sulle operazioni più lente, come quelle diaccesso al disco, al database o la chiamata ad un web service.Se non troviamo queste funzioni in cima al report è molto probabile che ci sia un collo di bottigliaaltrove e che quindi sia il caso di refactorizzare il componente o addirittura lintera architetturadellapplicazione ove possibile.Prima di ottimizzareE buona norma, prima di andare a lavorare su parti di codice “lento” andare a fare dellevalutazioni del tipo:- è proprio necessaria questa funzione?- è il posto giusto per questa funzione?- è possibile ridurre il volume di dati da processare?Se è vero che PHP non è mister velocità noi no diamogli una mano ad essere ancora più lento!Profilazione sotto caricoPer avere un report di dati realistico bisognerebbe lanciare XHprof sotto carico, ad esempiotramite dei toolscome apache ab o avalanche. Intesys Talk
  18. 18. Risorsehttp://pecl.php.net/package/xhprofhttp://xdebug.org/docs/profilerhttp://derickrethans.nl/xdebug-and-tracing-memory-usage.htmlhttp://kcachegrind.sourceforge.net/html/Home.htmlhttp://sourceforge.net/projects/wincachegrind/http://www.maccallgrind.com/http://www.slideshare.net/postwait/scalable-internet-architecture Intesys Talk

×