Blog

22. September 2017

Teil 2: Flaschenhälse erkennen – Tideways

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.

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 30-tägigen Testphase in drei Editionen erworben werden: Lite, Basic und Standard. 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.

Bereits mit der Lite-Edition lässt sich ein effizientes Profiling erstellen, das für die gezielte Suche nach Flaschenhälsen ausreicht. Ab der Basic-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.

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

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 release "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

Tideways ist bei maxcluster mit wenigen Klicks einrichtbar. Dazu wählen Sie im Managed Center den Menüpunkt „Profiler“ und verwenden die Schaltfläche „Tideways einrichten“. Nach Eingabe Ihres API-Keys und Auswahl des Frameworks sowie der Samplingrate können Sie Tideways mit nur einem Klick einrichten. Die Konfiguration ist nun jederzeit (de-)aktivierbar und gilt clusterweit. Falls Sie VHost-spezifische Einstellungen vornehmen möchten, können Sie diese in PHP überschreiben.

Weitere Beiträge dieser Blogserie

 

Bild: maxcluster GmbH, 2017

 

Teile diesen Beitrag