Tendances

blackfire

Blackfire, un profiler PHP visuel et facile à mettre en œuvre

La transformation digitale produit des applications de plus en plus complexes et critiques. Elles sont au cœur des stratégies des entreprises dont le résultat est directement lié à la pertinence de leurs orientations fonctionnelles et techniques. Dans ce contexte, les équipes techniques doivent répondre à des exigences fines de performance, on sait que le taux de décrochage des utilisateurs augmente de façon exponentielle après à peine quelques secondes d’attente. Pour délivrer des applications robustes et performantes, les développeurs disposent de multiples outils. Blackfire est l’un d’entre eux. Derrière ce nouveau produit, Fabien Potencier, le créateur du framework Symfony.

Que fait Blackfire?

Blackfire* est un outil qui permet de travailler de façon efficace sur la performance des applications. Il permet une analyse détaillée du temps de calcul des pages (ou des scripts CLI) d’une application afin d’identifier avec précision et en un minimum de temps les goulots d’étranglement éventuels, les fonctionnalités consommatrices de mémoire ou bien les temps d’attente d’I/O bloquant l’application durant son exécution.

La hiérarchie des différents appels de fonctions est facilement lisible et le chemin critique de l’application est visuellement mis en évidence. On peut ainsi identifier en un coup d’œil les traitements bloquants.

blackfire1

Blackfire face à la concurrence

Blackfire n’est pas le premier outil à fournir ces possibilités aux développeurs. Le monde PHP connait notamment depuis plusieurs années le profiler de l’extension xDebug, extension dédiée plus généralement aux développeurs pour analyser une application pendant la phase de développement. Plus récemment, Facebook a créé xhProf, un profiler Open-Source pour les applications PHP. Blackfire s’est appuyé dessus à ses débuts (il a depuis été réécrit).

La force de cet outil est son aspect SAAS, l’ensemble des analyses étant stockées sur les serveurs de l’éditeur. Il est ainsi possible de partager des profils avec des collaborateurs, voire de rendre des analyses publiques. Une fois une optimisation déployée, comparez directement le nouveau profil d’exécution avec un autre non optimisé afin de valider l’efficacité de la modification. L’analyse des temps d’accès au disque et au réseau est également facilitée par la remontée directe de ces informations dans le profil Blackfire.

Retour d’expérience

Nous avons utilisé Blackfire afin d’analyser les performances sur les webservices d’Open Orchestra (basé sur Symfony2) dans le but d’identifier les éventuels points d’amélioration.

Grace à l’outil de profiling, nous avons rapidement pu isoler deux méthodes critiques :

  • MongoDB::command(), consommant la plupart des IO et accès réseaux
  • GraphNavigator::accept() de la bibliothèque JMS Serializer, participant à une grande part de la consommation CPU

Dans le premier cas, le panneau latéral de Blackfire met en avant les ressources consommées par la méthode elle-même, en valeur absolue et relative par rapport à l’ensemble de la page (ici près de 100%).

blackfire2

Dans le second cas, nous avons pu identifier les interactions critiques dans le fonctionnement du sérialiseur. En effet, Blackfire nous permet de détailler les appels effectués par une méthode donnée en présentant leur poids relatif sur les différents critères de performance.

Sur l’illustration, nous pouvons observer que l’appel de la méthode Visitor::visitProperty() depuis Navigator::accept() est le goulot d’étranglement de cette bibliothèque. Il est donc important pour les intégrateurs de limiter la sérialisation aux données réellement utiles à l’application pour limiter les ralentissements.

blackfire3

Prêt à démarrer

La facilité d’installation est l’un des points forts de l’outil, qui ne nécessite aucune modification du code source analysé pour être mis en œuvre. C’est même un jeu d’enfant grâce au paquet mis à disposition par l’équipe Blackfire pour Linux et MacOS. Il est également possible d’envoyer manuellement sur blackfire.io des fichiers callgrind (pour des applications PHP ou d’autres langages) et de bénéficier des fonctionnalités d’analyse de Blackfire.

Enfin, il est  intéressant de noter que Blackfire a un impact très faible sur les performances du serveur. L’analyse peut être limitée aux requêtes effectuées par un administrateur depuis son poste, ce qui permet de l’utiliser quotidiennement en production pour obtenir des métriques pertinentes sans altérer la qualité du service.

Auteurs
Nicolas BLIN LinkedIn
Julien Chichignoud LinkedIn
Nicolas Thal LinkedIn

*Blackfire est un service proposé par la société SensioLabs SAS.

Voir toutes les tendances