Les outils de profiling PHP open source

Cet article a été publié depuis plus de 6 mois, cela signifie que le contenu peut ne plus être d'actualité.

L’activité de profiling consiste à collecter un certain nombre d’informations sur l’exécution d’un code PHP. Une telle opération est effectuée lorsque l’on souhaite par exemple analyser le code d’un projet pour améliorer sa scalabilité ou encore optimiser ce dernier pour corriger un problème de performance applicative.

Ce billet a été originalement publié sur le blog de la société Novaway dans le cadre de mon travail.

Lorsque Facebook a rendu public XHProf, son outil de profiling dédié à PHP en mars 2009, cela a été une petite révolution pour la communauté. Effectivement avant cet outil, il était nécessaire d’utiliser XDebug, mais ce dernier n’est pas recommandé pour un usage en production car l’activation du mode de profiling entraîne de gros ralentissement de l’application.

Contrairement à XDebug, XHProf a été conçu pour pouvoir être utilisé en production et l’impact sur les performances de l’application est minimal. Un autre avantage et qu’il est possible de profiler uniquement une portion de code. Il sera donc possible de récupérer des données telles que la consommation CPU, la consommation mémoire, le nombre d’appels et le temps passé dans chaque fonction. L’analyse de ces données est facilité par le fait que XHProf fournit l’ensemble des scripts nécessaires à cette opération.

Malheureusement, Facebook se concentre désormais sur le développement de sa machine virtuelle HHVM qui intègre nativement XHProf. De ce fait l’extension PHP n’est actuellement plus maintenue. Si l’extension reste compatible avec les versions 5.x de PHP, il n’est pas possible de l’utiliser avec les versions 7 du fait de changement interne dans la structure du moteur. On a alors vu ces dernières années se développer des solutions de profiling commerciales. La plus en vogue est certainement Blackfire.

Pour remédier à ce problème, les développeurs de la société Tideways ont décidé de forker le projet XHProf et de créer leur propre extension PHP. Cette dernière propose des fonctionnalités équivalentes à XHProf, mais est compatible avec toutes les versions de PHP depuis la version 5.3. Elle est également proposée en open source et disponible sur un dépôt Github.

<?php

include __DIR__ . '/common.php';
include __DIR__ . '/tideways_symfony.php';

tideways_enable();

$kernel = new \Symfony\Component\HttpKernel\Kernel();
$kernel->boot();

$httpKernel = new \Symfony\Component\HttpKernel\HttpKernel();
$httpKernel->handle('indexAction');
$httpKernel->handle('helloAction');

print_spans(tideways_get_spans());

tideways_disable();

Mais le profiling avec l’extension Tideways ne s’arrête pas à un simple fork iso-fonctionnel de XHProf, puisque les développeurs ont également ajouté des fonctionnalités supplémentaires telles que notamment la détection du framework exécutant le code “profilé” afin d’ajouter des informations essentiels et de diminuer “le bruit généré” par le code du framework. A l’heure de l’écriture de ce billet, l’extension supporte 13 frameworks.

L’extension fait maintenant partie du coeur de la solution “Tideways Profiler Platform” une solution commerciale SaaS proposé par le société. Cette partie commerciale n’est en rien obligatoire, mais apporte notamment une interface de visualisation des informations remontés par l’application ainsi qu’un stockage de ces dernières directement sur les serveurs de la société.

Au final, les solutions de profiling open source sont rares, mais existantes. Bien que XHProf ne soit aujourd’hui plus maintenu par Facebook pour PHP, l’extension fournie par Tideways est une excellente alternative aux diverses solutions commerciales existantes. Il sera cependant nécessaire de passer par une phase de configuration et de trouver l’outil nécessaire pour traiter les données de profiling. Cela reste certainement la meilleure solution pour des besoins ponctuels. Si par contre vous souhaitez avoir une solution fonctionnelle rapidement et avec un minimum d’effort, vous pourrez vous tourner vers les nombreuses solutions SaaS existantes.

D’ailleurs si vous souhaitez tester le profiling avec Tideways, n’hésitez pas à télécharger les stubs de l’extension afin d’avoir une auto-complétion dans votre IDE préféré.