Flaschenhälsen auf der Spur: Mit Blackfire PHP-Applikationen profilen

Philipp Zeder
Autor:

Philipp Zeder

Kategorie:

in

Neuigkeiten

Veröffentlicht am 19. Mai 2017

Aktualisiert am 7. März 2024

PHP-Applikation zu langsam? Unsicher, wo der Flaschenhals versteckt ist? Mit dem Dienst Blackfire erkennen PHP-Programmierer die Stellen in ihrem Code, die sie verbessern können. Die für Blackfire nötige PHP-Erweiterung ist ab sofort auf unseren Webhosting- und Cloudserver-Angeboten verfügbar.

Blackfire, ein Angebot aus dem Hause SensioLabs (Symfony, Silex, Twig), ist nach eigenen Angaben eine komplette «Performance Management Solution». Ursprünglich als Fork des PHP-Profilers Xhprof gestartet, bietet Blackfire mittlerweile eine ganze Palette an Funktionen, mit denen Sie die Performance Ihrer PHP-Applikation verbessern und Flaschenhälse finden können.

Call Graph – Das Herz von Blackfire

Blackfire bildet den Code Ihrer PHP-Applikation im sogenannten «Call Graph» ab, einem Flussdiagramm der ausgeführten PHP-Funktionen und -Methoden. Blackfire misst, wie lange die Ausführung der Funktionen und Methoden dauert, wie oft sie aufgerufen werden und welche weiteren Aktionen durch sie ausgelöst werden. Die Funktionen und Methoden sind durch Knotenpunkte dargestellt.

Blackfire-Interface

Der sogenannte «Hot Path» ist die Verbindung der Knotenpunkte, die während der Erstellung des Profils am aktivsten waren. Diese Aktionen haben den grössten Teil der Gesamtzeit oder des genutzten Arbeitsspeichers verbraucht und sind farblich hervorgehoben. Je intensiver die Farbe, desto höher war der Verbrauch.

«Hot Path» bei Blackfire

Flaschenhälse aufspüren

Flaschenhälse sind in der Regel im «Hot Path» zu finden. Damit sind die Knotenpunkte im «Hot Path» jene Code-Bausteine, die Sie als allererstes untersuchen sollten.

Nachdem Sie den «Hot Path» analysiert haben, werfen Sie einen Blick auf die Funktionen-/Methoden-Liste. Sie lässt sich nach «Exclusive Time», «Inclusive Time» und der Anzahl Calls sortieren. Die «Exclusive Time» bezeichnet dabei die Zeit, die das Ausführen der Funktion/Methode ohne deren Abhängigkeiten gedauert hat. «Inclusive Time» beinhaltet zusätzlich die Zeit, die beim Ausführen von eingebundenen Funktionen/Methode (Calls) verstrichen ist. «Calls» zeigt, wie oft die Funktion/Methode aufgerufen wurde.

Wie erkenne ich nun einen Flaschenhals? Wird eine Funktion/Methode sehr oft aufgerufen, könnte das bedeuten, dass dort überflüssige Aktionen stattfinden. Eine hohe «Exclusive Time» kann ein Indiz dafür sein, dass hier Verbesserungen möglich sind.

Blackfire bietet praktischerweise eine Vergleichsfunktion, mit der Sie Geschwindigkeitsveränderungen nach Code-Anpassungen sofort erkennen. Ab den kostenpflichtigen Paketen stehen Ihnen zudem Empfehlungen für Systeme wie Symfony, Laravel oder Magento zur Verfügung. Diese Empfehlungen sind von Experten erstellte Performance-Tests, mit denen die geprüfte Applikation verglichen wird.

Wie kann ich Blackfire nutzen?

Um Blackfire nutzen zu können, benötigen Sie zum einen ein Blackfire-Konto. Zum anderen muss der Blackfire-Agent auf dem Server aktiviert und mit dem eigenen Blackfire-Konto verbunden sein. Wie Sie Blackfire auf einem unserer Hosting-Angebote aktivieren, erfahren Sie in unserem Supportcenter: Wie kann ich Applikationen mit Blackfire profilen?

Sind die beiden Voraussetzungen erfüllt, kann das Profiling über verschiedene Methoden ausgeführt werden. Mit dem Blackfire-Companion erstellen Sie Profile direkt im Chrome-Browser. Die Nutzung ist aber auch via Kommandozeile und dank vielen Integrationen aus bestehenden Systemen möglich.

Die offizielle Dokumentation bietet ausgezeichneten Lesestoff zu allen Themen rund um Blackfire. Besonders Lesenswert ist das Tutorial «24 Days of Blackfire», das einen perfekten Einstieg in Blackfire und Web-Performance im Allgemeinen bietet.

Beteilige dich an der Diskussion

2 Kommentare

Thomas
Thomas 5. Juni 2017 15:03

Danke für diesen Beitrag.
Wenn ich es richtig verstanden habe, kann man mit Blackfire “lediglich” selber programmierte Applikationen überprüfen.
Weisst Du ob es so etwas in der Art auch für bereits bestehende Lösungen wie WordPress gibt?
Ich meine nicht Firebug, sondern eine Lösung welche sich direkt auf dem Server ausführen lässt und quasi in Echtzeit alle Abfragen und Codeschnippsel analysieren kann?

Philipp Zeder
Philipp Zeder cyon
6. Juni 2017 15:49

Hi Thomas. Grundsätzlich kannst Du jede PHP-Applikation mit Blackfire unter die Lupe nehmen, also auch Systeme wie WordPress. Mit Blackfire lässt sich zum Beispiel erkennen, wenn ein WordPress-Plugin einen Grossteil der Rechenzeit belegt. Für WordPress im Speziellen gibt’s das Plugin P3 Profiler, mit dem sich eine solche Auswertung auch direkt im WordPress-Backend anzeigen lässt. Leider wurde das Plugin schon länger nicht mehr aktualisiert, unter Umständen funktioniert es nicht mehr wie gewünscht.