Profiling PHP
+
Par Remi le dimanche 23 décembre 2007, 19:37 - HowTo - Lien permanent
Here is a very small guide to perform a PHP code profiling.
Voici un petit guide pour réaliser le pofil d'un programme PHP.
Lorsqu'un script PHP est trop long à l'exécution, il peut-être utile d'établir son profil afin de déterminer les fonctions nécessitant une optimisation.
Source : Profiling PHP Scripts sur http://xdebug.org/
Installation des outils
Il faut commencer par installer l'extension xdebug disponible dans les dépôts Fedora :
yum install php-pecl-xdebug
Puis installer l'outil d'analyse graphique des traces : KCacheGrind
yum install kdesdk
Configurer et activer l'outil d'enregistrement des traces
Après son installation, l'extension est activé dans le fichier /etc/php.d/xdebug.ini. On pourra modifier ce fichier.
; Activation de l'extension xdebug zend_extension=/usr/lib64/php/modules/xdebug.so
; Activation de l'enregistrement des traces
xdebug.profiler_enable=1
; Dossier d'enregistrement
xdebug.profiler_output_dir=/tmp
A l'issu des tests, il est préférable de désactiver ces options qui pénalisent très sensiblement les performances.
Enregistrer des traces
Dans le cas d'un script en ligne de commande, il suffit de le lancer.
Dans le cas d'une application web, il est préférable d'exécuter apache en mode debug pour éviter la création de processus multiples qui auront chacun leur fichier de traces.
service httpd stop httpd -X
Après avoir utiliser l'application, il suffira d'arreter apache en le tuant (Ctrl-C).
Les traces sont collectées dans le fichier /tmp/cachegrind.out.####, (ou #### est le numéro du processus).
Analyse des traces
Il suffit de lancer l'application KCacheGrind (menu Applications / Programmation) et d'ouvrir le fichier créé.
Le premier état permet de connaitre rapidement les fonctions qui consomme le plus de temps d'exécution :
Qu'il est possible de visualiser graphiquement :
Un autre graphique permet de voir les enchainements d'appels de manière simple, avec la consommation de temps très lisible :
A noter qu'il est aussi possible de consulter directement les sources du script depuis l'application.
Conclusion
Il ne s'agit que d'un petit guide pour vous mettre sur la voie. A vous de découvrir maintenant plus en détail les possibilités de ces outils.
Ils m'ont permis de découvrir plusieurs points d'optimisation et de réaliser des gains de performances significatifs dans mes développements.
Commentaires
Très impressionnant ... et utile !
Juste une question, je suis allergique (atchoum) aux applications commençant par un K, existe-t-il une solution sous gnome ?
In case you can not use KDE (or do not want to use KDE) the kcachegrind package also comes with a perl script "ct_annotate" which produces ASCII output from the profiler trace files.
Bonjour,
Je viens de commence à utiliser xdebug moi aussi, très intéressant sauf que d'après xdebug la page se construit en 170 ms alors que apache (avec le logcustom option %D) me dit 1700 ms. Et effectivement ca a bien l'air de mettre presque 2 secondes à télécharger.
Du coup si le php ne met que 170 ms et que apache rapporte 1700 (peu importe le reseau car ici ce n'est pas compte et de toutes facons je suis sur reseau local) avez vous une idee d'ou peut venir le probleme ?
Cordialement,
Guillaume