Performance messen

Leistung von Webanwendungen messen

Man kann nicht optimieren, was man nicht misst, ganz einfach. Deshalb muss man zunächst herausfinden, was die Applikation leistet und wo die Grenzen sind. Danach kann man sagen, ob eine Optimierung auch tatsächlich etwas gebracht hat.

Für die Messung von Webanwendungen gibt es einige Tools die mehr oder weniger komplex sind. Die zwei Tools Apachebench und JMeter möchte ich kurz näher vorstellen. Bei sind OpenSource und kostenlos im Web erhältlich.

Wichtig:

Ein Test ist nur Aussagekräftig, wenn er vergleichbar ist. Das bedeutet, dass er immer auf der gleichen Hardware, zu einer gleichen Grundauslastung des Systems ausgeführt werden soll. Ansonsten sind die Daten aus dem Test wertlos.

Schnelle Trendermittlung mit Apachebench

Apachebench ist ein Kommandozeilen Tool, das mit den Webserver Apache ausgeliefert wird.

Es dient dazu sehr einfache Lasttest durchzuführen.

Beispiel:

ab -n 50 http://www.admin-wissen.de/

Dieser Aufruf ruf 50 mal die Startseite von admin-wissen.de auf und zeigt danach die Testergebnisse an.

Dabei wurde ein Durchsatz von 6 Seiten pro Sekunde erzielt.

JMeter

Apachebench bietet einen groben Eindruch welchen Durchsatz eine einzelne Webseite bietet. Moderne Webapplikation bestehen hingegen aus vielen unterschiedlichen Seiten mit unterschiedlichen Navigationpfaden.

Ausserdem besteht eine solche Webapplikation aus interaktiven Elementen wie Formularen etc. Der Test einer solchen Applikation erfordert viel mehr Optionen.

Genau hier kommt JMeter ins Spiel. Mit JMeter können detailierte Testpläne mit verteilter Häufigkeit und sehr ausführlichen Reportmöglichkeiten erstellt werden.

Einfacher JMeter Testplan

Das Prinzip von JMeter ist, dass einzelne Komponeten in einer Baumstruktur zusammen geklickt werden. Dadurch können verschiedene Komponeten zu komplexen Testplänen kombiniert werden.

Ein Einfacher Testplan besteht aus folgenden Komponenten:

1. Einer Threadgruppe

Eine Threadgruppe gruppiert die Tests. Für diese Gruppe kann festgelegt werden viele Test der Gruppe parallel ausgeführt werden sollen und wie oft ein Test wiederholt werden soll. Hinzugefügt werden kann eine Threadgruppe über den Menüpunkt "Hinzufügen -> Thread Gruppe"

2. HTTP Defaulteinstellungen

Es macht Sinn HTTP Einstellungen die von mehreren Tests gemeinsam genutzt werden, wie z.B: den Hostnamen zu teilen.

Für diesen Zweck kann innerhalb einer Threadgruppe ein Element "HTTP Request Defaulteinstellungen" erstellt werden.

Hierbei habe ich als Hostname "www.admin-wissen.de" konfiguriert. Hinzugefügt werden kann diesen Element über "Konfigurationselement -> HTTP Request Defaulteinstellungen"

3. HTTP Request

Der HTTP Request ist der Aufruf der zu testenden Seite. Darin können beliebige GET und POST Variablen definiert werden.
Hinzugefügt wird der HTTP Request über "Sample -> HTTP Request"

4. Versicherte Antwort

Neben dem Aufruf möchten wir auch testen ob die Seite das erwartete Resultat liefert. Das ist wichtig, weil wir feststellen müssen ob unter Last nicht etwa eine Fehlerseite ausgeliefert wurde.

Die Versicherte Antwort wird unterhalb des HTTP Request mittels "Überprüfung -> Versicherte Antwort" angelegt.
In der Detailansicht der Komponente können einfache Textmuster definiert werden, die auf der Zielseiten enhalten sein müssen.

5. Summary View

Für die Ausgabe der Testergebnisse gibt es in JMeter zahlreiche Möglichkeiten. Für das GUI nutze ich persönlich gerne den "Summary View oder den Result Tree". Für eine automatisierte Auswertung in Jenkis oder für die Analyse größerer Tests eignen sich andere Auswertungskomponenten besser.

Der "Summary View" wird innerhalb der Thread Gruppe mittels "Listener -> Summary View" hinzugefügt.

Der Testplan sollte nachdem die zuvor beschriebenen Komponenten angelegt wurden folgenden Aufbau haben:

Der fertige JMeter Testplan

Nachdem der Test fertig konfiguriert wurde, kann er mittels "Start -> Start" gestartet werden. Während der Test läuft sieht man im GUI die laufenden Threads. Ausserdem fühlt sich der "Summary View" mit Daten. Die Spalte "Durchsatz" verrät hierbei die erfolgreich ausgelieferten Seiten.

Hierbei sollte man schauen, dass die Fehlerrate zunächst bei 0 liegt. Danach sollte man die Anzahl der parallelen Aufrufen in der Threadgruppe regelmäßig erhöhen, bis die Fehlerrate steigt oder der Durchsatz nicht weiter steigt. Dann hat man in etwa ermittelt, wo die Grenze der Applikation liegt :)

Navigation