Teil 2: Flaschenhälse erkennen - Tideways

22.09.2017
extendedLogo

Tideways ist ein Werkzeug für das Profiling, Monitoring und Tracking in PHP. Anhand von Beispielen und Screenshots werden im zweiten Teil der Blogserie Funktionen und Anwendungsgebiete dieses Profilers erklärt. [Update: 23.11.2023]

Wofür wird Tideways angewendet?

Tideways analysiert serverseitige PHP-Prozesse. Dabei kann das Programm sowohl einzelne Seiten wie auch den gesamten Onlineshop analysieren. Die Stärke von Tideways liegt in der Laufzeitanalyse eines PHP-Aufrufes. Aber auch in anderen Szenarien lassen sich mit Tideways Flaschenhälse analysieren. Wird beispielsweise festgestellt, dass der Shop eine ungewöhnlich hohe Menge an Arbeitsspeicher belegt, lässt sich mit diesem Profiler der verantwortliche Webseitenaufruf lokalisieren. In diesem Fall zeigt Tideways an, welche Aufrufe wie viel Arbeitsspeicher verbraucht haben.

Tideways Editionen

Der Profiler Tideways kann nach einer kostenfreien 14-tägigen Testphase in drei Editionen erworben werden: Basic, Standard und Pro. Alle drei Editionen enthalten die gleichen Profiling Features ebenso wie das Monitoring. Die Unterschiede in den Preiskategorien berechnen sich unter anderem aus der Anzahl der Traces pro Monat, der Dauer der „Retention“ sowie der Limitierung der Serveranzahl. Bei der Standard-Version gibt es außerdem ein Histogramm und bei der Pro-Version zudem noch SQL bzw. Downstream Layer und Alarmierung.

Bereits mit der Basic-Edition lässt sich ein effizientes Profiling erstellen, das für die gezielte Suche nach Flaschenhälsen ausreicht. Ab der Standard-Edition kommen zudem noch weitere komfortable Services hinzu. Besonders hervorzuheben ist die Benachrichtigungsfunktion des Profilers, wodurch der technisch Verantwortliche per E-Mail Informationen über Ereignisse wie Ausfälle der Anwendung oder hohe Ladezeiten erhält. Ab der Basic-Edition sind sowohl Multi-Service Projekte (z.B. CMS und Shop wie etwa Magento und WordPress oder auch Microservices) sowie Multi-Environments (z.B. Produktion & Staging Server) umsetzbar. Zudem ist ab dieser Edition eine REST API verfügbar. Ab der Standard-Edition können Teams verwaltet und mit Github synchronisiert werden.

Zusätzlich zu den regulären Versionen gibt es seit Kurzem auch noch 2 Developer Editionen. Diese verfügen nur über ein eingeschränktes Monitoring, erlauben aber die Überwachung von 10 Anwendungen (Profiler 10 Edition) oder eine unbegrenzte Anzahl an Anwendungen (Profiler Unlimited Edition). Daher sind diese beiden Editionen besonders für Entwickler und Agenturen von Interesse, welche mehrere Onlineshops betreuen.

Profiling

Das Profiling lässt sich in vier unterschiedlichen Ansichten auswerten: Timeline, Summary, Calltabelle und Callgraph.

Timeline

Eine Besonderheit von Tideways stellt bereits die erste Ansicht dar, die Timeline. Hier werden Daten nach ihrer Dauer aufgezeigt (siehe Screenshot 1: Tideways Timeline). Damit lassen sich Laufzeiten und Aufrufe einzelner Funktionen übersichtlich betrachten. Im Timeline Tracing werden die einzelnen Funktionen gemäß ihrem Zeitverbrauch in Millisekunden dargestellt. Dabei sind die Funktionen farblich nach ihrer zugehörigen Rubrik dargestellt, wie etwa App, PHP, SQL, Events, Controller, Views. Die Funktionen lassen sich außerdem noch detaillierter betrachten. Wird eine Funktion in der Timeline ausgewählt, erscheinen detaillierte Informationen im rechten Kasten.

In unserem Screenshot werden zum Beispiel die benötige Zeit zum Starten der Funktion und die Dauer der Nutzung, das Framework und der User angezeigt. Die Detailinformationen, die abgerufen werden können, hängen dabei von der jeweiligen Rubrik ab.

Tideways erkennt die verwendete PHP-Anwendung während eines Profilings und kann so unter anderem bereits eine Hervorhebung von Controller- und View-Funktionalitäten darstellen.
Die sogenannte „N+1 Detection“ zeigt an, wenn Funktionen in ähnlicher Art und Weise wiederholt aufgerufen werden. Dies bietet die Möglichkeit, Codestellen mit besonders hohem Optimierungspotenzial auszumachen.

Screenshot 1: Tideways Timeline

Screenshot 1: Tideways Timeline

Die Rubrik „SQL“ zeigt anonymisierte Versionen von SQL-Querys mit ihrer jeweiligen Dauer an (siehe Screenshot 2: Rubrik SQL). Zudem zeigt sie ihre Ausführungszeit an.

Screenshot 2: Rubrik SQL

Screenshot 2: Rubrik SQL

Summary

Die zweite Ansicht zur Auswertung ist die Zusammenfassung unter dem gleichnamigen Tab „Summary“ (siehe Screenshot 3: Summary). Hier sind die Funktionen nach Kategorien aufgelistet und mit ihrer Anwendungsdauer angezeigt. Zur detaillierten Ansicht können die Kategorien angeklickt werden.

Screenshot 3: Summary

Screenshot 3: Summary

Wenn Tideways Problemstellen aufdeckt, werden diese in einem weiteren Tab „Bottleneck“ eingeblendet. Hier erscheint eine Information in Textform, die mögliche Ursachen und Lösungsvorschläge beinhaltet.

Calltabelle

Die dritte Auswertungsansicht bietet die Calltabelle (siehe Screenshot 4: Calltabelle). In dieser Tabelle lässt sich leicht ablesen, wie lange die inklusive Dauer sowie die exklusive Dauer der einzelnen Funktionen benötigt haben und wie oft Sie aufgerufen wurden.

Screenshot 4: Calltabelle

Screenshot 4: Calltabelle

Callgraphen

Die Funktionsaufrufe jeder PHP-Anfrage lassen sich zudem detailliert in der vierten Ansicht, dem Callgraphen, anzeigen. Damit ist auch ein Vorher-Nachher-Vergleich bei geplanten Optimierungen am Code möglich (siehe Screenshot 5: Callgraph und Screenshot 6: Vergleichsansicht). Auf der rechten Seite wird erneut eine Calltabelle und auf der linken Seite der Callgraph angezeigt. Mit dieser grafischen Darstellung lässt sich auf den ersten Blick erkennen, welche Funktion von welcher übergeordneten Funktion aufgerufen wurde. Dies ist insofern bedeutsam, als dass sich auf diese Weise herausfinden lässt, in welcher Verbindung die langsame Funktion, die den Flaschenhals auslöst, zu den anderen Funktionen steht. In der Timeline-Ansicht lassen sich diese Daten ebenfalls ablesen. Insofern kann die Auswertung der Daten entsprechend der persönlichen Präferenz durch die Timeline- oder die Callgraphen erfolgen.

Screenshot 5: Callgraph

Screenshot 5: Callgraph

Sowohl im Timeline- als auch dem Callgraph-Modus gibt es zudem Unterstützung für die Speicherprofilerstellung. Zum einen kann man die Speichermenge sehen, die während der vollständigen Ausführung einer ausgewählten Zeitspanne im Timeline-Profiler zugewiesen wurde. Zweitens können Sie zur Speicheransicht wechseln und eine Zeitachse des allokierten Speichers von 0 bis zum Spitzenspeicher sehen. Und drittens kann der Callgraph-Profiler jetzt den allokierten Speicher jedes einzelnen Funktionsaufrufs anzeigen.

Compare-Ansicht

Mit der Compare-Ansicht von Tideways lassen sich zwei Funktionsaufrufe direkt miteinander vergleichen (siehe Screenshot 6: Vergleichsansicht). So lassen sich Änderungen im Code oder im Verhalten schnell analysieren. Bei der Compare-Ansicht können die Daten in einer Timeline (wie es unser Beispiel im Screenshot zeigt), nach Funktionen oder in Callgraphen verglichen werden.

Screenshot 6: Vergleichsansicht

Screenshot 6: Vergleichsansicht

CLI-Analyse

Neben der Analyse von Webaufrufen lassen sich mit Tideways auch CLI-Aufrufe betrachten.

Mit folgendem Befehl lässt sich ein CLI Command analysieren und ein Profiling der Datei myscript.php erstellen.

tideways run meineOrganisation/meineAnwendung php myscript.php

Auch Webaufrufe und API Calls lassen sich über die mächtigen CLI-Werkzeuge von Tideways analysieren:

tideways run meineOrganisation/meineAnwendung curl http://test.de/fuu

Sogar ein Deployment lässt sich auf diese Weise automatisiert tracken, sodass dieses im Tideways Dashboard sichtbar ist. Dazu genügt folgender Aufruf:

tideways event:create*meineOrganisation/meineAnwendung*"Deployed v4.2"

Weitere Möglichkeiten zur CLI-Analyse werden in der offiziellen Anleitung erklärt. Weiterhin wird in der Dokumentation erklärt, wie man direkt aus PHP heraus eine Tideways-Analyse starten kann.

Monitoring

Beim Monitoring erhält der Betrachter Einblicke in die Ladezeiten des gesamten Onlineshops (siehe Screenshot 7: Performance Übersicht). Sehr schnell lassen sich damit langsamere Ladezeiten als üblich erkennen. Bei Bedarf stellt der technisch Verantwortliche Echtzeitwarnungen ein, um bei Fehlern rechtzeitig gewarnt zu werden. Diese Funktion ist ab der Basic-Edition nutzbar.

Mit dieser Software lassen sich außerdem die Reaktionszeiten, die Anzahl der Anfragen und die Fehler auf einer minütlichen Basis auf der Applikations-, Service- und individuellen Transaktionsebene ablesen. Der Zeitrahmen dafür lässt sich individuell einstellen. Das ermöglicht Vergleiche der Anwendungsleistung zu bestimmten Zeiten. Somit kann der technisch Verantwortliche überprüfen, wie sich die Antwortzeiten in bestimmten Zeitrahmen für die Besucher verhalten haben.

Auch im Bereich des Monitorings baut sich der Verantwortliche die Benachrichtigungen nach seinen individuellen Anforderungen in seinen eigenen Workflow ein. Die Benachrichtigungen können per E-Mail, IRC, HipChat und Slack empfangen werden.

Beim Monitoring beleuchtet Tideways die Requests von Besuchern. Der Profiler analysiert dabei die PHP-Aufrufe. Es muss somit nicht festgelegt werden, welche Seiten überwacht werden sollen. Die Analyse funktioniert auf diese Weise auch, wenn Tideways hinter einen Loadbalancer oder einen anderen Dienst vorgeschaltet ist.

Screenshot 7: Performance Übersicht

Screenshot 7: Performance Übersicht

Fehler-Tracking

Der Profiler verfügt zudem noch über die Funktion des Fehler-Trackings (siehe Screenshot 8: Fehler-Tracking). In allen Editionen lassen sich damit Fehler lokalisieren, bevor ein Shopbesucher eine Störung bemerkt. Sobald die Fehler entstehen, erhält eine definierte Person ab der Basic-Edition eine Benachrichtigung und kann unmittelbar mit der Analyse beginnen. Die Fehlerwarnung enthält viele wichtige Details, wie zum Beispiel die Quelle, die Häufigkeit des Auftretens, betroffene Transaktionen sowie die Zeitpunkte des ersten und letzten Auftretens.

Screenshot 8: Fehler-Tracking

Anwendungsbeispiel

Es ist gewünscht in einen bestehenden Onlineshop ein 3rd-Party-Modul zu installieren, welches die Produktdetails einer Seite verändert. Bevor der technisch Verantwortliche es in den Livebetrieb übernimmt, möchte er sicherstellen, dass dieses Modul die Performance des Onlineshops nicht negativ beeinträchtigt. Er installiert daher das Modul in einer Testumgebung und verwendet die Tideways Chrome Extension, um ein Profiling der Seite zu erstellen.

Damit überprüft der Verantwortliche, welche Auswirkungen das Plugin auf die Performance der Seite haben würde. Durch eine Überprüfung mit Tideways ist es dem technisch Verantwortlichen möglich, potenzielle Probleme noch vor der Liveschaltung zu erkennen und zu beheben.

Tideways bei maxcluster einrichten

Bei maxcluster lässt sich Tideways mit nur wenigen Klicks einrichten. Dazu wählen Sie im Managed Center den Menüpunkt "Profiler" und nutzen die Option "Tideways einrichten". Nachdem Sie Ihren API-Key eingegeben und das Framework sowie die Samplingrate ausgewählt haben, können Sie Tideways mit nur einem Klick konfigurieren. Anschließend können Sie die Tideways-Integration für jede Domain individuell in den Domain-Einstellungen unter dem Reiter "PHP" (de-)aktivieren.

Weitere Beiträge dieser Blogserie

Bild: maxcluster GmbH, 2017


Zuletzt aktualisiert am 23.11.2023 | DW