xhprof ist ein hierarchischer Profiler, der die Wall Time von Funktionen, die Anzahl der Calls pro Funktion und auch den Speicherverbrauch sowie die CPU-Auslastung der einzelnen Methoden aufzeichnen kann. Der Profiler steht in erster Linie als PHP-Extension (geschrieben in C) zur Verfügung und wird über eine in PHP geschriebene Library ergänzt. Die zusätzliche PHP-Library dient dabei zur grafischen Darstellung der Reports, welche die Extension generiert.
Installation
xhprof wird über PECL bereitgestellt und liegt aktuell in der Version 0.9.2 vor. Die aktuelle Version benötigt PHP 5.2 (oder neuer) sowie den PEAR Package Installer ab Version 1.4.0.
Um xhprof zu installieren, reicht folgendes Kommando:
sudo pecl install xhprof-0.9.2
Anschließend xhprof als PHP Extension unter /etc/php5/conf.d/xhprof.ini hinzufügen:
extension=xhprof.so
Ist das soweit erledigt, noch einmal kurz seinen Webserver neustarten und die Erweiterung steht ab sofort in PHP zur Verfügung und kann verwendet werden.
Grundlgende Verwendung
Zunächst prüft man, ob die Extension grundlegend zur Verfügung steht, ehe man sie verwendet:
der Profiler erlaubt es auch, nur bestimmte Teile seines Codes auswerten zu lassen:
Nach Beendigung des profilings über xhprof_disable() hält $output nun ein Array mit dem Ergebnis des Profilers. In $output stehen nun folgende Information drin:
- Die aufgerufenen Funktionen sowie die Anzahl der Calls
- Die wall time insgesamt sowie pro Funktion
- Die CPU-Zeit
- Speicherverbrauch der Methode (dabei wird die Differenz zwischen dem Function Call und dem Ende gemessen
Grafische Auswertung
Um das Ergebnis grafisch hübsch und tabellarisch zu bekommen, gibt es noch eine PHP-Library, welche die Daten von xhprof entgegen nimmt und aufbereitet.
Die Library findet sich auf Github unter https://github.com/facebook/xhprof und kann mit folgendem Kommando auf ein lokales Verzeichnis seines Rechners kopiert werden:
git clone git://github.com/facebook/xhprof.git
Mittels der Library bietet xhprof des Weiteren die Möglichkeit, die Ergebnisse von Proflings zu speichern und auch zeitversetzt auswerten zu können:
Die Variable $run_id hält anschließend eine eindeutige ID mit der das Ergebnis über die HTML-Library ausgegeben werden kann. Diese Library befindet sich unter lib_html/
Der Aufruf funktioniert anschließend folgendermaßen:
lib_html/index.php??run=[$run_id]
Die Report-Ansicht sieht so aus:
Die Ansicht zeigt in erster Linie eine Übersicht über das Ergebnis des Proflings an. Oben eine “Overall Summary” in der die gesamten Laufzeit sowie die Anzahl der Function Calls insgesamt dargestellt wird.
In der darunter liegenden Tabelle werden die 100 teuersten Funktionsaufrufe dargestellt. Über “Display all” lassen sich allerdings alle Funktionsaufrufe darstellen.
Ein Klick auf einen Funktionsnamen zeigt anschließend die genauen Details über eine Funktion an:
Fazit
xhprof ist ein leichtgewichtiger Profiler, der nicht mehr tut, als er soll. Über PECL ist die Installation sehr bequem gestaltet und die Einbindung ist ebenso banal.
Und im Zeitalter von MVC lässt sich xhprof auf einfache Art über einen Parameter an- und wieder ausschalten. Die Ergebnisse lassen sich anschließend ohne weiteren Aufwand in der UI darstellen.