SlideShare une entreprise Scribd logo
1  sur  46
Profilage avec XHProf #phptourLille - 24/25 novembre 2011
Martin Supiot Job @cleverage Twitter @webaaz Blog webaaz.com Projet mybabygame.com
Le profilage est la mesure et l'analyse de l'execution d'un script.
Profilage Un outil de profilage permet de : Détecter les goulots d'étranglements Refactoriser sans perte de performances S'assurer que tout est bien optimisé
Présentation
Contexte Facebook participe à des projets tels que : MySQL memcached PHP Varnish ...
Contexte Facebook est à l'origine d'outils tels que : Cassandra HipHop for PHP ...
XHProf
Présentation
Présentation XHProf est un profileur hiérarchique Il est doté d'une interface de navigation PHP/HTML. Les données sont collectées par une extension PHP implémentée en C.
Présentation XHProf permet de mesurer la charge mémoire, le temps et le nombre d'appels de chaque fonction. Il peut nativement comparer ou aggréger des résultats
Le projet est en beta et le sera probablement toujours désormais. Il est cependant stable et peut être utilisé !
Open-source Le projet a été liberé en mars 2009 sous license Apache 2.0 et est disponible sur : Pecl Github Dépôts ppa non-officiels
Statistiques Une utilisation discrète 0.9.2 - 1er juin 2009 : 61,267  0.9.1 - 21 mars 2009 : 4,924  0.9.0 - 18 mars 2009 : 3,430
Extensibilité symfony Symfony 2 Drupal Wordpress XHGui
XHGui L'interface la plus aboutie, elle réécrit l'implémentation de base en y ajoutant la sauvegarde des données sur un SGBD.
Installation
Compilation wget http://pecl.php.net/get/xhprof-0.9.2.tgz tar xvfz xhprof-0.9.2.tgz cd xhprof-0.9.2/extension phpize ./configure make sudo make install sudo make test
Configuration (php.ini) [xhprof] extension=xhprof.so xhprof.output_dir="/var/log/xhprof" Il ne reste qu'à vérifier le phpinfo() et c'est parti !
Graphviz Pour l'affichage des rapports sous forme graphique, la librairie Graphviz dot est nécéssaire.
XHGui Récupération de l'archive sur Github et copie dans le dossier web du serveur Création de la table sur le SGBD
XHGui Ajout des paramètres de la base de données au fichier de configuration Ajout de vhost et configuration du fichier hosts
Mise en œuvre basique // Début du profilage xhprof_enable(); // Éxécution du programme foo(); // fin du profilage $xhprof_data = xhprof_disable(); // affichage des données brutes print_r($xhprof_data);
Mise en œuvre simplifiée Création de fichiers header.php et footer.php & inclusion via Apache : php_value_auto_prepend_file "/var/www/xhprof/xhprofgui/external/header.php" php_value_auto_append_file "/var/www/xhprof/xhprofgui/external/footer.php"
Contexte Test d'un système de concaténation et minification de JS et de CSS.
Analyse des résultats
pistes d'optimisation Optimisation du code  Ajout d'un système de cache
Analyse des résultats
Comparaison des résultats
Autres possibilités
Utilisation en production XHProf permet une utilisation en production grâce à son faible impact et à une possibilité d'échantillonner les pages cibles. 1/10000 par exemple.
Aggrégation de "runs" L'aggrégation permet d'analyser ces différents runs sur la durée
Limitation du périmètre Par ajout d'une liste de fonctions à l'activation du profileur
Rendu graphique Pratique pour avoir rapidement une vue d'ensemble Utile pour montrer à un décideur
Couplage avec PHPUnit Utile pour un profilage plus fin
Documentation
Documentation officielle Un peu brouillonne mais complète est disponible sur Github en anglais.
Documentations annexes Une version française va la rejoindre sous peu. Il existe quelques autres sources éparses mais qui suffisent largement à prendre le produit en main.
Limitations Trace partielle de la pile d'appel limitée aux enfants et parents
Bilan
Simplicité Outil simple et paramétrable Outil extensible Montée en compétence totale rapide
Éfficacité Un outil bas niveau qui n'interfère pas sur les résultats Un outil qui n'évolue plus mais qui est stable
Remerciements Changhao Jiang Kannan Muthukkaruppan Venkat Venkataramani & Haiping Zhao pour le développement original
Remerciements George Cabrera pour l'interface Paul Saab pour le port FreeBSD Paul Reinheimer pour XHPRofGUI
Crédits photo http://www.flickr.com/photos/nesposit/66324519 http://www.flickr.com/photos/dsevilla/237130712 http://www.flickr.com/photos/chagiajose/4959105215 http://www.flickr.com/photos/oo_x/5722068585 http://www.flickr.com/photos/cedric1981/1708924667 http://www.flickr.com/photos/dolldreamer/5163734135 http://www.flickr.com/photos/flyzipper/342012313 http://www.flickr.com/photos/lancesh/570897306
Des questions ? Job @cleverage Twitter @webaaz Blog webaaz.com Projet mybabygame.com

Contenu connexe

Tendances

AlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPAlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPjulien pauli
 
CARA - Coding Dojo TDD & Open Closed Principle
CARA - Coding Dojo TDD & Open Closed PrincipleCARA - Coding Dojo TDD & Open Closed Principle
CARA - Coding Dojo TDD & Open Closed PrincipleCharles Bouttaz
 
Glowroot, le petit APM qui vous veut du bien
Glowroot, le petit APM qui vous veut du bienGlowroot, le petit APM qui vous veut du bien
Glowroot, le petit APM qui vous veut du bienHenri Gomez
 
Je s'appelle Glowroot - LyonJUG Oct 2018
Je s'appelle Glowroot - LyonJUG Oct 2018Je s'appelle Glowroot - LyonJUG Oct 2018
Je s'appelle Glowroot - LyonJUG Oct 2018Henri Gomez
 
BBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - PuppetBBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - PuppetOlivier BAZOUD
 

Tendances (6)

AlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPAlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHP
 
CARA - Coding Dojo TDD & Open Closed Principle
CARA - Coding Dojo TDD & Open Closed PrincipleCARA - Coding Dojo TDD & Open Closed Principle
CARA - Coding Dojo TDD & Open Closed Principle
 
Glowroot, le petit APM qui vous veut du bien
Glowroot, le petit APM qui vous veut du bienGlowroot, le petit APM qui vous veut du bien
Glowroot, le petit APM qui vous veut du bien
 
Dynamic Languages
Dynamic LanguagesDynamic Languages
Dynamic Languages
 
Je s'appelle Glowroot - LyonJUG Oct 2018
Je s'appelle Glowroot - LyonJUG Oct 2018Je s'appelle Glowroot - LyonJUG Oct 2018
Je s'appelle Glowroot - LyonJUG Oct 2018
 
BBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - PuppetBBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - Puppet
 

En vedette

J. Fournier - Elektronisches Publizieren: Entwicklungen und Erfahrungen
J. Fournier - Elektronisches Publizieren: Entwicklungen und ErfahrungenJ. Fournier - Elektronisches Publizieren: Entwicklungen und Erfahrungen
J. Fournier - Elektronisches Publizieren: Entwicklungen und Erfahrungeninfoclio.ch
 
transport médical
transport médicaltransport médical
transport médicalLP EXPRESS
 
Antennenwels Apfelschnecke Goldfischkinder
Antennenwels Apfelschnecke GoldfischkinderAntennenwels Apfelschnecke Goldfischkinder
Antennenwels Apfelschnecke GoldfischkinderAndy Cyberwuppi
 
Geld ist für die Menschen da - Markenführung in einer Social Bank
Geld ist für die Menschen da - Markenführung in einer Social BankGeld ist für die Menschen da - Markenführung in einer Social Bank
Geld ist für die Menschen da - Markenführung in einer Social BankJohannes Korten
 
Facebook Fanpage Best Practice
Facebook Fanpage Best PracticeFacebook Fanpage Best Practice
Facebook Fanpage Best PracticeClemens Bartlome
 
‘Fehler vorprogrammiert’ Paul Tours, Senior Consultant/Human Inference
‘Fehler vorprogrammiert’ Paul Tours, Senior Consultant/Human Inference‘Fehler vorprogrammiert’ Paul Tours, Senior Consultant/Human Inference
‘Fehler vorprogrammiert’ Paul Tours, Senior Consultant/Human InferenceDataValueTalk
 
CSS: Listen formatieren
CSS: Listen formatierenCSS: Listen formatieren
CSS: Listen formatierenlehrerfreund
 
#starterpoint Impuls vom 16. Januar 2014, Zürich: Wie kann ich meine digitale...
#starterpoint Impuls vom 16. Januar 2014, Zürich: Wie kann ich meine digitale...#starterpoint Impuls vom 16. Januar 2014, Zürich: Wie kann ich meine digitale...
#starterpoint Impuls vom 16. Januar 2014, Zürich: Wie kann ich meine digitale...beeq
 
HTML: Bilder einfügen (img-Tag)
HTML: Bilder einfügen (img-Tag)HTML: Bilder einfügen (img-Tag)
HTML: Bilder einfügen (img-Tag)lehrerfreund
 
Internet redes sociales y elecciones
Internet redes sociales y eleccionesInternet redes sociales y elecciones
Internet redes sociales y eleccionesDalilaserra95
 

En vedette (20)

Propiedades de la chía
Propiedades de la chíaPropiedades de la chía
Propiedades de la chía
 
Technodiversion
TechnodiversionTechnodiversion
Technodiversion
 
French
FrenchFrench
French
 
Joab
JoabJoab
Joab
 
J. Fournier - Elektronisches Publizieren: Entwicklungen und Erfahrungen
J. Fournier - Elektronisches Publizieren: Entwicklungen und ErfahrungenJ. Fournier - Elektronisches Publizieren: Entwicklungen und Erfahrungen
J. Fournier - Elektronisches Publizieren: Entwicklungen und Erfahrungen
 
Was Ist Unser Zeitgeist 2.0
Was Ist Unser Zeitgeist 2.0Was Ist Unser Zeitgeist 2.0
Was Ist Unser Zeitgeist 2.0
 
Mi ple
Mi pleMi ple
Mi ple
 
transport médical
transport médicaltransport médical
transport médical
 
Antennenwels Apfelschnecke Goldfischkinder
Antennenwels Apfelschnecke GoldfischkinderAntennenwels Apfelschnecke Goldfischkinder
Antennenwels Apfelschnecke Goldfischkinder
 
Geld ist für die Menschen da - Markenführung in einer Social Bank
Geld ist für die Menschen da - Markenführung in einer Social BankGeld ist für die Menschen da - Markenführung in einer Social Bank
Geld ist für die Menschen da - Markenführung in einer Social Bank
 
Facebook Fanpage Best Practice
Facebook Fanpage Best PracticeFacebook Fanpage Best Practice
Facebook Fanpage Best Practice
 
‘Fehler vorprogrammiert’ Paul Tours, Senior Consultant/Human Inference
‘Fehler vorprogrammiert’ Paul Tours, Senior Consultant/Human Inference‘Fehler vorprogrammiert’ Paul Tours, Senior Consultant/Human Inference
‘Fehler vorprogrammiert’ Paul Tours, Senior Consultant/Human Inference
 
CSS: Listen formatieren
CSS: Listen formatierenCSS: Listen formatieren
CSS: Listen formatieren
 
General Session
General SessionGeneral Session
General Session
 
#starterpoint Impuls vom 16. Januar 2014, Zürich: Wie kann ich meine digitale...
#starterpoint Impuls vom 16. Januar 2014, Zürich: Wie kann ich meine digitale...#starterpoint Impuls vom 16. Januar 2014, Zürich: Wie kann ich meine digitale...
#starterpoint Impuls vom 16. Januar 2014, Zürich: Wie kann ich meine digitale...
 
HTML: Bilder einfügen (img-Tag)
HTML: Bilder einfügen (img-Tag)HTML: Bilder einfügen (img-Tag)
HTML: Bilder einfügen (img-Tag)
 
Mad world-violin-cello
Mad world-violin-celloMad world-violin-cello
Mad world-violin-cello
 
Formation
FormationFormation
Formation
 
Feste 1
Feste 1Feste 1
Feste 1
 
Internet redes sociales y elecciones
Internet redes sociales y eleccionesInternet redes sociales y elecciones
Internet redes sociales y elecciones
 

Similaire à Xhprof

20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders BattleArnaud Héritier
 
20100221 my phingtool - blog
20100221   my phingtool - blog20100221   my phingtool - blog
20100221 my phingtool - blogPHPPRO
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache MavenArnaud Héritier
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !VISEO
 
Kiwiparty 2011 - Optimisation des sites internet
Kiwiparty 2011 - Optimisation des sites internetKiwiparty 2011 - Optimisation des sites internet
Kiwiparty 2011 - Optimisation des sites internetDevclic
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applicationsgoldoraf
 
Partie 1_Matriser les bases PHP v0555555555555.pptx
Partie 1_Matriser les bases PHP v0555555555555.pptxPartie 1_Matriser les bases PHP v0555555555555.pptx
Partie 1_Matriser les bases PHP v0555555555555.pptxHamzaElgari
 
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 WordCamp Lyon 2015 - WordPress, Git et l'intégration continue WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
WordCamp Lyon 2015 - WordPress, Git et l'intégration continueStéphane HULARD
 
Big Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache ZeppelinBig Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache ZeppelinBruno Bonnin
 
hassclic270.ppt
hassclic270.ppthassclic270.ppt
hassclic270.pptadiouf2
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPJean-Marc Fontaine
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache MavenArnaud Héritier
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPrestaShop
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureJonathan Bonzy
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureMarc Nazarian
 

Similaire à Xhprof (20)

20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle
 
20100221 my phingtool - blog
20100221   my phingtool - blog20100221   my phingtool - blog
20100221 my phingtool - blog
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Kiwiparty 2011 - Optimisation des sites internet
Kiwiparty 2011 - Optimisation des sites internetKiwiparty 2011 - Optimisation des sites internet
Kiwiparty 2011 - Optimisation des sites internet
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applications
 
Partie 1_Matriser les bases PHP v0555555555555.pptx
Partie 1_Matriser les bases PHP v0555555555555.pptxPartie 1_Matriser les bases PHP v0555555555555.pptx
Partie 1_Matriser les bases PHP v0555555555555.pptx
 
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 WordCamp Lyon 2015 - WordPress, Git et l'intégration continue WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 
Big Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache ZeppelinBig Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache Zeppelin
 
Chapter1
Chapter1Chapter1
Chapter1
 
hassclic270.ppt
hassclic270.ppthassclic270.ppt
hassclic270.ppt
 
43_pps.pdf
43_pps.pdf43_pps.pdf
43_pps.pdf
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHP
 
Mysql
MysqlMysql
Mysql
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
 
Installation open erp
Installation open erpInstallation open erp
Installation open erp
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShop
 
Lp web tp3_idse
Lp web tp3_idseLp web tp3_idse
Lp web tp3_idse
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeure
 
Symphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeureSymphonie pour PHP industrialisé en agilité majeure
Symphonie pour PHP industrialisé en agilité majeure
 

Xhprof