Die Wiederbelebung von XHProf
Kommentare

Die einst von Facebook erdachte PHP-Extension XHProf hat mit Qafoo vor einiger Zeit einen neuen Maintainer gefunden; denn die haben mit dem Qafoo Profiler ein Projekt gestartet, das auf dem Profiler des

Die einst von Facebook erdachte PHP-Extension XHProf hat mit Qafoo vor einiger Zeit einen neuen Maintainer gefunden; denn die haben mit dem Qafoo Profiler ein Projekt gestartet, das auf dem Profiler des Sozialen Netzwerks aufbaut. Da sich aber Zeiten und Zuständigkeiten ändern, fehlte es XHProf ein wenig an Liebe – und die bekommt es jetzt zur Genüge. In der Tat zeigt sich nach knapp einem Monat: die Arbeiten an dem Fork scheinen gut voranzuschreiten.

XHProf und die Frage nach dem Warum

Die PHP-Extension XHProf wurde vor einiger Zeit von Facebook entwickelt – in einer Zeit vor der HHVM, um genau zu sein. Nach dem Umstieg Facebooks auf die HipHop Virtual Machine (und damit auch auf Hack) sah man sich nicht mehr genötigt, all zu viel Arbeit in den Profiler zu stecken – gelegentliche Updates, die das Kompilieren mit aktuellen PHP-Versionen ermöglichten, außen vor gelassen.

Im Juli dann war es so weit: XHProf wurde aus dem Facebook-Repository ausgegliedert.

Zu diesem Zeitpunkt jedoch war die Extension bereits ein integraler Bestandteil eines neuen Players auf dem Monitoring-Markt: dem Qafoo Profiler. Da man eine zuverlässige Integration von XHProf in den Qafoo Profiler garantieren musste, hat das junge Unternehmen das Projekt geforkt – und schnell die ersten Verbesserungen einfließen lassen:

Starting with PHP 5.5.8 XHProf would segfault because of a change in how the Zend Engine represents a function execution. There was an unmerged Pull Request on the XHProf repository which we merged into our fork.

Die Updates

Im ersten Schritt bereits wurde der Fork um ein interessantes Feature erweitert: die Function Whitelist, das Gegenteil zu ignore_functions, das bereits in XHProf implementiert war.

With a whitelist of interesting functions such as PDOStatement::execute, curl_exec and file_get_contents you can already find the most critical performance bottlenecks that are I/O related without collecting data for all the other function calls. This improves the performance of XHProf massively allowing to collect data for non-PHP layers on every request.

Aufbauend auf einen Patch von Syseleven wurde außerdem das Problem behoben, dass XHProf nur Informationen zu Eltern- und Kind-Funktionen sammelt – bei umfangreicheren Funktionen wie curl_exec oder beinahe alle dateisystemrelevanten Funktionen wie beispielsweise fgets stieß der Profiler an seine Grenzen.

Im zweiten Schritt wurde unter anderem ein neuer Flag hinzugefügt, XHPROF_FLAGS_NOUSERLAND, mit dem es möglich ist, die Funktionen aus dem Userland zu ignorieren.

Außerdem wurde das Beenden des Profilings in der Funktion xhprof_disable vereint, das Error-Collection-Feature überarbeitet und mit „layer“ ein neuer Profiling-Modus eingeführt.

Ausblicke

Aktuell gibt es noch kein offizielles Repository für den Fork – statt dessen liegt der Code in diversen Branches auf GitHub. Für die Zukunft jedoch hat sich das Team vorgenommen, das Projekt mit einer Open-Source-Lizenz zu versehen und als neue Extension zu veröffentlichen.

Bis dahin gilt es jedoch, die eine oder andere Unwägbarkeit in den Griff zu bekommen. So zeigten erste Experimente mit PHP 5.6 beispielsweise, dass XHProf nicht ohne weiteres damit kompatibel sind. Daran werde allerdings bereits gearbeitet.

XHProf lebt also weiter – und die Community wird auch davon profitieren.

Aufmacherbild: Illustration of an isolated head with an icon von Shutterstock / Urheberrecht: Blablo101

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -