Xhprof est un profiler de code PHP. C’est un concurrent de Xdebug développé par Facebook.
Il a le gros avantage de permettre de visualiser l’évolution de la mémoire. A ma connaissance, Xdebug ne le permet pas.
Il ne nécessite pas l’utilisation d’un logiciel tiers (type KCachegrind, non disponible sous Windows…argh…) et peut être installé sur un serveur de production sans, normalement, trop dégrader les performances.
Je vais ici vous décrire son installation sur Zend Server CE et l’installation de xhprof gui
Si vous utilisez une installation de PHP moins exotique (genre une debian avec les dotdeb), son installation sera, à mon avis, simplifiée :
Installation de xhprof
On récupère les sources et on les décompresse :
On compile :
On modifie la configuration de PHP pour lui indiquer de charger cette extension :
On ajoute :
Il est nécessaire de créer le répertoire /tmp/xhprof et de donner les droits à l’utilisateur Apache (je fais un 777 par simplicité)
On redémarre Apache :
Un phpinfo() doit normalement afficher l’extension xhprof.
On va tester rapidement que cela fonctionne en essayant de profiler un script PHP. Pour profiler il est nécessaire d’ajouter quelques lignes de code dans le script PHP. Vous verrez ensuite une technique pour l’ajouter de manière automatique sur l’ensemble des scripts PHP (via xhprof gui) :
L’exécution de ce script devrait générer un fichier dans le répertoire /tmp/xhprof. Si oui, l’installation de l’extension xhprof est ok.
Visualiser l’analyse de vos scripts
xhprof propose une interface de consultation des “profiling” effectués. Cette application (xhprof gui) est disponible dans un dépôt git.
Actuellement, elle possède quelques dysfonctionnements (plantage lors de l’analyse d’un script trop important) mais qui peuvent être résolus.
Pour installer xhprof gui, vous pouvez suivre la procédure d’installation :
Xhprof gui propose de stocker les éléments d’analyse dans une base (mysql, mssql, …). Dans notre exemple, nous allons utiliser mysql.
On crée une base pour xhprof :
xhprof gui a besoin d’une table details dans la base xhprof. La description de la table est décrite dans le fichier Mysqli.
Il est ensuite nécessaire de créer un Virtual Host pour accéder à xhprof gui :
N’oubliez pas de l’activer et d’ajouter dans votre fichier /etc/hosts une entrée pour ce nouveau domaine.
Il est nécessaire de modifier le fichier xhprof_lib/config.php avec les paramètres qui vont bien.
Voici les premières lignes du fichier config.php que j’utilise :
Ensuite pour tous les virtual hosts que vous souhaiteraient monitorer, vous pouvez ajouter les lignes suivantes dans la configuration du VH :
Désormais en bas de chaque page, vous disposerez normalement d’un lien permettant d’accéder au profiling de la page courante.
Dernier point, si vous souhaitez générer des graphiques de ce type , il est nécessaire d’installer graphviz :
J’espère que ces quelques notes vous aiderons à débuter avec xhprof.
Cet article s’est largement inspiré de profiling php application?
Edit 27/11/2012 : Correction suite à commentaire d’un visiteur.