PHP Profilage avec Xdebug


Exemple

Une extension de PHP appelée Xdebug est disponible pour vous aider à profiler les applications PHP , ainsi que le débogage à l'exécution. Lors de l'exécution du profileur, la sortie est écrite dans un fichier au format binaire appelé "cachegrind". Des applications sont disponibles sur chaque plate-forme pour analyser ces fichiers.

Pour activer le profilage, installez l'extension et ajustez les paramètres php.ini. Dans notre exemple, nous allons exécuter le profil sur la base d’un paramètre de requête. Cela nous permet de conserver les paramètres statiques et d’activer le profileur uniquement si nécessaire.

// Set to 1 to turn it on for every request
xdebug.profiler_enable = 0
// Let's use a GET/POST parameter to turn on the profiler
xdebug.profiler_enable_trigger = 1
// The GET/POST value we will pass; empty for any value
xdebug.profiler_enable_trigger_value = ""
// Output cachegrind files to /tmp so our system cleans them up later
xdebug.profiler_output_dir = "/tmp"
xdebug.profiler_output_name = "cachegrind.out.%p"

Ensuite, utilisez un client Web pour faire une demande à l’URL de votre application que vous souhaitez profiler, par exemple

http://example.com/article/1?XDEBUG_PROFILE=1

Comme la page traite, il va écrire dans un fichier avec un nom similaire à

/tmp/cachegrind.out.12345

Notez qu'il va écrire un fichier pour chaque requête / processus PHP exécuté. Ainsi, par exemple, si vous souhaitez analyser une publication de formulaire, un profil sera écrit pour la demande GET afin d'afficher le formulaire HTML. Le paramètre XDEBUG_PROFILE devra être transmis à la requête POST suivante pour analyser la deuxième requête qui traite le formulaire. Par conséquent, lors du profilage, il est parfois plus facile d'exécuter curl pour POST directement un formulaire.

Une fois écrit, le cache de profil peut être lu par une application telle que KCachegrind.

KCachegrind

Cela affichera des informations, y compris:

  • Fonctions exécutées
  • Heure d'appel, à la fois elle-même et comprenant les appels de fonction ultérieurs
  • Nombre de fois où chaque fonction est appelée
  • Graphes d'appel
  • Liens vers le code source

De toute évidence, le réglage des performances est très spécifique aux cas d'utilisation de chaque application. En général, il est bon de chercher:

  • Appels répétés à la même fonction que vous ne vous attendez pas à voir. Pour les fonctions qui traitent et interrogent des données, celles-ci peuvent constituer des opportunités de choix pour votre application en cache.
  • Fonctions lentes Où l'application passe-t-elle le plus de temps? le meilleur rapport qualité-prix de l'optimisation des performances se concentre sur les parties de l'application qui consomment le plus de temps.

Remarque : Xdebug, et en particulier ses fonctionnalités de profilage, consomment beaucoup de ressources et ralentit l’exécution de PHP. Il est recommandé de ne pas les exécuter dans un environnement de serveur de production.