Teil 1: Flaschenhälse erkennen - Blackfire IO
Im ersten Teil unserer Blogserie „Flaschenhälse erkennen mit 3 effizienten Profiling Tools“ stellen wir die Anwendungsmöglichkeiten von Blackfire IO für Onlineshops ausführlich vor.
Mit der Performance eines Onlineshops stehen und fallen seine Umsätze. Viele Onlinehändler kennen das Problem, dass Ladezeiten ohne sofort ersichtlichen Grund sehr hoch sind. Ein solcher „Flaschenhals“ kann beispielsweise auf kleinen Problemen im Code beruhen und damit die übrigen Prozesse deutlich verlangsamen. Mit dem Profiling Tool „Blackfire IO“ lassen sich solche Ursachen schnell erkennen.
Uns hat dieser Profiler zur schnellen Analyse von Fehlerquellen überzeugt. Deshalb haben wir in unserem Managed Center eine Funktion zur schnellen Installation von Blackfire integriert.
Wofür kann Blackfire IO angewendet werden?
Blackfire ist ein Analysewerkzeug, mit welchem sich PHP Applikationen zu dem Zweck profilieren lassen, Daten über Zeit, CPU, I/O Wait, Memory, Network Calls, HTTP und SQL Requests zu sammeln. Diese Daten werden übersichtlich in verschiedenen Graphen visualisiert. Flaschenhälse lassen sich damit auf einen Blick erkennen.
Blackfire Editionen
Primär eignet sich Blackfire für die Analyse von HTTP-Anfragen. Das lässt sich bereits mit der kostenlosen „Hack Edition“ umsetzen. Mit dieser Version lassen sich außerdem die meisten reproduzierbaren Performance Engpässe auflösen. Weitere Features der Hack Edition: Analyse von Kommandozeilenscripten und API-Aufrufen, Profiling nach Ausführungszeit und Arbeitsspeicherverbrauch, PHP SDK für eigene Metriken. Bitte beachten Sie, dass diese Version bei maxcluster nicht einsetzbar ist.
Ab der kostenpflichtigen Profiler Edition lassen sich auch Werte abfragen, wie: CPU Verbrauch, I/O, SQL-Anfragen. Zudem können Referenzprofile erstellt werden.
Die Premium Edition enthält alle Feautures der Profiler Edition und zudem noch: Leistungsbehauptungen, geplante Builds, mehr Referenzprofile. Mit der Premium oder Enterprise Edition lassen sich darüber hinaus eigene Tests und Szenarien schreiben.
Auf der linken Seite werden die inklusive Dauer und die exklusive Dauer von Funktionen aufgezeigt. Die inklusive Dauer bezieht sich auf die Dauer, welche die Funktion inklusive der Unterfunktion benötigt. Die exklusive Dauer bezieht sich dabei nur auf die Zeitspanne, welche die Funktion ohne die Unterfunktion benötigt.
Jede Funktion lässt sich auswählen und einzeln im Detail betrachten. Im Screenshot zeigen wir beispielhaft die Funktion „autoload“ im gelben Kasten. Hier werden die Anzahl der Aufrufe, Unterfunktionen sowie Zeit- und Speicherverbrauch angezeigt. Auch einzelne Unteraufrufe lassen sich im Detail analysieren (siehe Screenshot 2). Auf der rechten Seite zeigt der Callgraph den Ablauf der Anwendung an.
1. Analyse von HTTP Anfragen
Das Haupteinsatzgebiet von Blackfire liegt in der Analyse von HTTP-Anfragen durch Webseiten Besucher, API- oder Webservice-Aufrufe.
Blackfire überwacht Web Applikationen nicht in Echtzeit. Blackfire sammelt also nicht konstant Daten von Real-Usern. Solange keine HTTP-Anfrage analysiert werden soll, ist Blackfire nicht aktiv. Die Überwachung wird nur bei Performance Problemen und ausschließlich von autorisierten Nutzern aktiviert. (Dieser Aktivierungsvorgang wird später im Anwendungsbeispiel beschrieben.) Auf diese Weise kann der Profiler auch auf produktiven Servern und bei Projekten mit hohem Traffic ohne Performance Einbußen eingesetzt werden. Eine Besonderheit von Blackfire ist, dass sich selbst in der kostenlosen Hack Edition der Speicher- und Zeitverbrauch von Webanwendungen analysieren lässt (siehe Screenshot 3: Memory Profling).
Auf der linken Seite werden die inklusive Speicherbelegung und die exklusive Speicherbelegung der einzelnen Funktionen aufgelistet. Auf der rechten Seite ist standardmäßig der Callgraph zu sehen.
Eine detaillierte Timeline lässt sich ab der Profiler Edition darstellen (siehe Screenshot 4: Timeline). Hier lassen sich auch alle weiteren, bereits beschriebenen Metriken entsprechend anzeigen.
Interessant ist außerdem die Analyse von SQL Queries. Dieses Feature ist ab der Profiler Edition verfügbar. (Siehe Screenshot 5: SQL Analyse).
Anwendungsbeispiel für die HTTP Analyse mit Chrome Plugin
Nach einem Update mehrerer Module für einen Magento Onlineshop sind die Übersichtsseiten der Produkte infolgedessen wesentlich langsamer. Es lässt sich pauschal nicht eingrenzen, welches Modul für die Verlangsamung verantwortlich ist.
Blackfire hilft in diesem Fall, ein gezieltes Profiling für eine Übersichtsseite zu erstellen. Nach der Installation von „Blackfire Companion“ für Chrome, kann der Entwickler eine Übersichtsseite im Shop besuchen und einfach den „Profile“ Button des Chrome Companions anklicken, um die Analyse zu starten.
Kurze Zeit später erscheint in seinem Blackfire Account ein Profiling. Damit erkennt der Entwickler schnell und einfach, welches Modul bzw. welche Codestelle des Moduls für die erhöhte Ladezeit verantwortlich ist.
2. Analyse von CLI Kommandos
Mit Blackfire lässt sich außerdem Code in der Kommandozeile analysieren. Es können einfache PHP CLI Scripte oder bestimmte Teile eines Codes analysiert werden.
Bsp. cron.php: Mit folgendem Befehl wird die cron.php aufgerufen und analysiert.
blackfire run cron.php
Des Weiteren sind in den „Docs“ auf der Blackfire Homepage verschiedene Beispiele aufgeführt.
3. Referenzprofile erstellen
Ab der kostenpflichtigen Profiler Edition von Blackfire lassen sich Referenzprofile erstellen. Damit lassen sich geplante Veränderungen am Code vorab testen und in einem zweiten Profil anzeigen. Die simultane Ansicht zweier Profile bietet einen idealen Vorher-Nachher-Vergleich, mit dem sich die Auswirkungen der gewünschten Veränderungen evaluieren lassen. Auch der direkte Vergleich zwischen zwei Codeständen (z.B. staging und live) ist möglich.
In der Vergleichsdarstellung lässt sich ein Seitenaufruf mit einem Referenzprofil vergleichen. Im Grunde genommen sieht man detailliert, welche Funktionen beschleunigt oder verlangsamt wurden. Außerdem zeigt der Vergleich, wie sich die Anzahl der Aufrufe verändert und wie sich dies anschließend auf das Gesamtergebnis des Webseitenaufrufs auswirkt. In diesem Beispiel werden die Auswirkungen von „Lesti Fpc“ auf einen Magento Shop (Sample Data) dargestellt.
4. Eigene Tests schreiben
Mit Blackfire in der Premium oder Enterprise Edition ist es möglich, eigene Performance Tests zu schreiben. Damit können Entwickler ihren Code gründlich testen. Eigene Messgrößen lassen sich ebenfalls beliebig hinzufügen. Außerdem ist die Umgebung an eigene Arbeitsprozesse anpassbar. Somit können Teams auf allen Umgebungen zusammenarbeiten: Development, Testing, Staging und Produktion.
Mit Blackfire sind Tests außerdem automatisierbar und zu einem beliebigen Zeitpunkt planbar. Ferner lässt sich einstellen, ob man nur beim Auffinden von Fehlerquellen benachrichtigt werden möchte oder immer wenn der Testbericht abgeschlossen ist.
5. Eigenes Szenario schreiben
In der Premium oder Enterprise Edition können Entwickler sogar eigene Szenarien schreiben. Ein Blackfire Szenario ist kurzum eine Liste wichtiger URLs, die regelmäßig profiliert werden. Das ist besonders dann sinnvoll, wenn eine neue Version der Anwendung automatisiert auf Performance getestet wird.
Blackfire IO bei maxcluster einrichten
In unserem Managed Center findet man unter „Profiler“ seit Kurzem den neuen Button „Blackfire IO“. Nach dem Anklicken öffnet sich ein Popup, in welchem lediglich die Server ID und das „Token“ von Blackfire einzugeben sind. Das Token erhalten Sie direkt bei Blackfire Pricing nach dem Erstellen eines Accounts.
Für eine einfachere Analyse empfehlen wir überdies den Blackfire Companion für Chrome.
Weitere Beiträge dieser Blogserie
- Flaschenhälse erkennen mit 3 effizienten Profiling Tools
- Teil 2: Tideways
- Teil 3: New Relic APM
- Teil 4: Vergleich der drei Profiler Blackfire IO, Tideways und New Relic APM
Grafik: blackfire.io, 2017
Zuletzt aktualisiert am 12.05.2021 | JH