So verwenden Sie Apache JMeter zum Ausführen von Auslastungstests auf einem Webserver

Einführung

In diesem Lernprogramm wird erläutert, wie Sie mit Apache JMeter grundlegende Last- und Belastungstests für Ihre Webanwendungsumgebung durchführen. Wir zeigen Ihnen, wie Sie mithilfe der grafischen Benutzeroberfläche einen Testplan erstellen und Tests auf einem Webserver ausführen.

JMeter ist eine Open-Source-Desktop-Java-Anwendung, die zum Laden von Tests und zum Messen der Leistung entwickelt wurde. Es kann verwendet werden, um Lasten verschiedener Szenarien zu simulieren und Leistungsdaten auf verschiedene Arten auszugeben, einschließlich CSV- und XML-Dateien sowie Grafiken. Da es sich zu 100% um Java handelt, ist es auf jedem Betriebssystem verfügbar, das Java 6 oder höher unterstützt.

Voraussetzungen

Um diesem Tutorial folgen zu können, benötigen Sie einen Computer, auf dem Sie JMeter ausführen können, und einen Webserver, auf dem Sie Tests durchführen können. Führen Sie diese Tests nicht auf Ihren Produktionsservern aus, es sei denn, Sie wissen, dass sie die Last bewältigen können, da dies die Leistung Ihres Servers beeinträchtigen kann.

Sie können die Tests in diesem Lernprogramm an Ihre eigenen Webanwendungen anpassen. Der Webserver, gegen den wir testen, ist ein VPS mit 1 CPU / 512 MB, auf dem WordPress auf einem LEMP-Stack im NYC2 DigitalOcean-Datacenter ausgeführt wird. Der JMeter-Computer wird in der DigitalOcean-Niederlassung in NYC ausgeführt (was mit der Latenz unserer Tests zusammenhängt).

Beachten Sie, dass die JMeter-Testergebnisse durch eine Reihe von Faktoren verzerrt werden können, einschließlich der Systemressourcen (CPU und RAM), die JMeter und dem Netzwerk zwischen JMeter und dem zu testenden Webserver zur Verfügung stehen. Die Größe der Last, die JMeter generieren kann, ohne die Ergebnisse zu verzerren, kann durch Ausführen der Tests im nicht grafischen Modus oder durch Verteilen der Lastgenerierung auf mehrere JMeter-Server erhöht werden.

Installieren Sie JMeter

Da wir Apache JMeter als Desktop-Anwendung verwenden und eine Vielzahl von Desktop-Betriebssystemen verwendet werden, werden die Installationsschritte von JMeter für kein bestimmtes Betriebssystem behandelt. Damit ist JMeter sehr einfach zu installieren. Die einfachste Art der Installation ist die Verwendung eines Paketmanagers (z. apt-get oder Homebrew) oder laden Sie die JMeter-Binärdateien von der offiziellen Website herunter und deinstallieren Sie sie, und installieren Sie Java (Version 6 oder höher).

Hier ist eine Liste der Software mit Links zu Archiven, die zum Ausführen von JMeter * erforderlich * sind:

Je nachdem, wie Sie Java installieren, müssen Sie möglicherweise das Java-Bin-Verzeichnis zu Ihrer Umgebungsvariablen + PATH + hinzufügen, damit JMeter die Java- und Keytool-Binärdateien findet.

Außerdem verweisen wir auf den Pfad, in den Sie JMeter installiert haben (das Verzeichnis, in das Sie es aus dem Archiv entfernt haben), als "+ $ JMETER_HOME ". Wenn Sie also ein Linux- oder Unix-basiertes Betriebssystem verwenden, befindet sich die JMeter-Binärdatei unter ` $ JMETER_HOME / bin / jmeter `. Unter Windows können Sie ` $ JMETER_HOME / bin / jmeter.bat +` ausführen.

Zum Nachschlagen haben wir beim Schreiben dieses Lernprogramms die folgenden Softwareversionen verwendet:

  • Oracle Java 7-Update 60, 64-Bit

  • JMeter 2.11

Nachdem Sie JMeter installiert und ausgeführt haben, können Sie einen Testplan erstellen.

Erstellen eines grundlegenden Testplans

Nach dem Start von JMeter sollte die grafische Benutzeroberfläche mit einem leeren Testplan angezeigt werden:

Ein Testplan besteht aus einer Folge von Testkomponenten, die bestimmen, wie der Belastungstest simuliert wird. Wir werden erklären, wie einige dieser Komponenten verwendet werden können, wenn wir sie in unseren Testplan aufnehmen.

Fügen Sie eine Thread-Gruppe hinzu

Fügen Sie dem Testplan zunächst eine Thread-Gruppe hinzu:

  1. Klicken Sie mit der rechten Maustaste auf "Testplan".

  2. Maus über _Add> _

  3. Fahren Sie mit der Maus über _Threads (Benutzer)> _

  4. Klicken Sie auf "Thread-Gruppe".

Die Thread-Gruppe hat drei besonders wichtige Eigenschaften, die den Belastungstest beeinflussen:

  • * Anzahl der Threads (Benutzer) *: Die Anzahl der Benutzer, die JMeter zu simulieren versucht. Setze dies auf * 50 *

  • * Hochlaufzeit (in Sekunden) *: Die Zeitdauer, über die JMeter den Start der Threads verteilt. Stellen Sie dies auf * 10 *.

  • * Loop Count *: Die Häufigkeit, mit der der Test ausgeführt werden soll. Belassen Sie diesen Wert auf * 1 *.

Fügen Sie Standardeinstellungen für HTTP-Anforderungen hinzu

Das HTTP Request Defaults Config-Element wird verwendet, um Standardwerte für HTTP-Anforderungen in unserem Testplan festzulegen. Dies ist besonders nützlich, wenn wir im Rahmen unseres Tests mehrere HTTP-Anforderungen an denselben Server senden möchten. Fügen wir nun die HTTP-Anforderungsstandards zu _Thread Group hinzu:

  1. Wählen Sie "Thread-Gruppe" aus und klicken Sie mit der rechten Maustaste darauf

  2. Maus über _Add> _

  3. Bewegen Sie die Maus über _Config Element> _

  4. Klicken Sie auf HTTP Request Defaults

Füllen Sie in den HTTP-Anforderungsstandards im Abschnitt "Webserver" das Feld "Servername" oder "IP" mit dem Namen oder der IP-Adresse des zu testenden Webservers aus. Wenn Sie den Server hier festlegen, wird er zum Standardserver für die übrigen Elemente in dieser Threadgruppe.

image: https: //assets.digitalocean.com/articles/jmeter/http_request_defaults.png [HTTP Request Defaults]

Wenn Ihr Webserver Cookies verwendet, können Sie Unterstützung für Cookies hinzufügen, indem Sie der Thread-Gruppe einen HTTP-Cookie-Manager hinzufügen:

  1. Wählen Sie "Thread-Gruppe" aus und klicken Sie mit der rechten Maustaste darauf

  2. Maus über _Add> _

  3. Bewegen Sie die Maus über _Config Element> _

  4. Klicken Sie auf HTTP Cookie Manager

Fügen Sie einen HTTP Request Sampler hinzu

Nun möchten Sie der _Thread-Gruppe einen HTTP-Anforderungs-Sampler hinzufügen, der eine Seitenanforderung darstellt, auf die jeder Thread (Benutzer) zugreifen wird:

  1. Wählen Sie "Thread-Gruppe" aus und klicken Sie mit der rechten Maustaste darauf

  2. Maus über _Add> _

  3. Maus über _Sampler> _

  4. Klicken Sie auf HTTP Request

Füllen Sie in der HTTP-Anforderung im Abschnitt "HTTP-Anforderung" den Pfad mit dem Element aus, das jeder Thread (Benutzer) anfordern soll. Wir setzen dies auf "+ / +", damit jeder Thread auf die Homepage unseres Servers zugreift. Beachten Sie, dass Sie den Server in diesem Element nicht angeben müssen, da er bereits im Element HTTP Request Defaults angegeben wurde.

  • Hinweis: * Wenn Sie im Rahmen Ihres Tests weitere HTTP-Anforderungen hinzufügen möchten, wiederholen Sie diesen Schritt. Jeder Thread führt alle Anforderungen in diesem Testplan aus.

Hinzufügen von Ansichtsergebnissen im Tabellen-Listener

In JMeter werden Listener verwendet, um die Ergebnisse eines Auslastungstests auszugeben. Es gibt eine Vielzahl von Listenern, und die anderen Listener können durch Installieren von Plugins hinzugefügt werden. Wir werden die Tabelle verwenden, da sie leicht zu lesen ist.

  1. Wählen Sie "Thread-Gruppe" aus und klicken Sie mit der rechten Maustaste darauf

  2. Maus über _Add> _

  3. Maus über _Listener> _

  4. Klicken Sie auf Ergebnisse in Tabelle anzeigen

Sie können auch einen Wert für Filename eingeben, um die Ergebnisse in eine CSV-Datei auszugeben.

Führen Sie den Basistestplan aus

Nachdem wir unseren grundlegenden Testplan erstellt haben, können wir ihn ausführen und die Ergebnisse anzeigen.

Speichern Sie zunächst den Testplan, indem Sie auf Datei und dann auf Speichern klicken und dann den gewünschten Dateinamen angeben. Wählen Sie dann im linken Bereich "Ergebnisse in Tabelle anzeigen" aus, klicken Sie im Hauptmenü auf "Ausführen" und dann auf "Starten" (oder klicken Sie einfach auf den grünen Pfeil "Start" unter dem Hauptmenü). Sie sollten die Testergebnisse in der Tabelle sehen, wenn der Test wie folgt ausgeführt wird:

image: https: //assets.digitalocean.com/articles/jmeter/results_table1.png [Tabelle der Testergebnisse]

Interpretation der Ergebnisse

Sie werden wahrscheinlich feststellen, dass der Status aller Anforderungen "Erfolgreich" ist (angezeigt durch ein grünes Dreieck mit einem Häkchen). Danach sind die Spalten, die Sie wahrscheinlich am meisten interessieren, die Spalten Sample Time (ms) _ und _ Latency _ (im Beispiel nicht angezeigt).

  • * Latenz *: Die Anzahl der Millisekunden zwischen dem Senden der Anforderung durch JMeter und dem Empfang einer ersten Antwort

  • * Sample Time *: Die Anzahl der Millisekunden, die der Server benötigt hat, um die Anfrage vollständig zu bedienen (Antwort + Latenz)

Gemäß der generierten Tabelle lag der Bereich der Abtastzeit zwischen 128 und 164 ms. Dies ist eine angemessene Antwortzeit für eine einfache Homepage (ca. 55 KB). Wenn Ihr Webanwendungsserver nicht um Ressourcen kämpft, wie im Beispiel gezeigt, wird Ihre Beispielzeit hauptsächlich von der geografischen Entfernung (die im Allgemeinen die Latenz erhöht) und der Größe des angeforderten Elements (die die Übertragungszeit erhöht) beeinflusst. Ihre persönlichen Ergebnisse weichen vom Beispiel ab.

So überlebte unser Server die Simulation, dass 50 Benutzer innerhalb von 10 Sekunden (5 pro Sekunde) auf unsere 55 KB große WordPress-Homepage zugegriffen haben, mit einer akzeptablen Antwort. Mal sehen, was passiert, wenn wir die Anzahl der Threads erhöhen.

Erhöhen der Last

Versuchen wir den gleichen Test mit 80 Threads über 10 Sekunden. Ändern Sie im Element _Thread-Gruppe im linken Bereich die Anzahl der Threads (Benutzer) _ in * 80 *. Klicken Sie nun auf "Ergebnisse in Tabelle anzeigen" und anschließend auf "Starten". Auf unserem Beispielserver ergibt dies die folgende Tabelle:

Wie Sie sehen, hat sich die Beispielzeit auf fast eine Sekunde erhöht, was darauf hinweist, dass unser Webanwendungsserver durch Anforderungen langsam überlastet wird. Melden Sie sich bei unserem VPS an und sehen Sie sich während des Auslastungstests die Ressourcennutzung an.

Melden Sie sich über SSH bei Ihrem Webserver an und führen Sie "+ top +" aus:

top

Sofern Sie nicht über Benutzer verfügen, die aktiv auf Ihren Server zugreifen, sollten Sie feststellen, dass der Prozentsatz der CPU (s) -Nutzernutzung (us) sehr niedrig oder 0% und der Prozentsatz der CPU (s) im Leerlauf (id) 99% + sein sollte damit:

Starten Sie nun in * JMeter * den Test erneut und kehren Sie zur SSH-Sitzung Ihres Webservers zurück. Sie sollten die Ressourcennutzung erhöhen:

In unserem Beispiel beträgt die CPU-Auslastung in% 94% und die Systemauslastung (sy) 4,7% bei 0% Leerlauf. Wir haben nicht genügend Arbeitsspeicher, wie in der Abbildung oben gezeigt, daher ist die verringerte Leistung auf mangelnde CPU-Leistung zurückzuführen! Wir können auch sehen, dass die PHP5-FPM-Prozesse, die WordPress bedienen, den größten Teil der CPU nutzen (etwa 96% zusammen).

Um die Anforderungen dieser Simulation von 80 Benutzern in 10 Sekunden zu erfüllen, müssen wir entweder unsere CPU erhöhen oder unser Server-Setup optimieren, um weniger CPU zu verbrauchen. Im Fall von WordPress könnten wir die MySQL-Datenbank (die einen Teil der CPU verwendet) auf einen anderen Server verschieben und das Zwischenspeichern implementieren (was die CPU-Auslastung verringern würde).

Wenn Sie neugierig sind, können Sie die Anzahl der Threads im Test anpassen, um festzustellen, wie viele Threads auf Ihrem Server verarbeitet werden können, bevor Leistungseinbußen auftreten. Im Fall unseres 1-CPU-Droplet-Beispiels funktioniert es einwandfrei, bis wir innerhalb von 10 Sekunden 72 Threads verwenden.

Fazit

JMeter kann ein sehr wertvolles Tool sein, um zu bestimmen, wie das Setup Ihres Webanwendungsservers verbessert werden sollte, um Engpässe zu verringern und die Leistung zu steigern. Nachdem Sie mit der grundlegenden Verwendung von JMeter vertraut sind, können Sie neue Testpläne erstellen, um die Leistung Ihrer Server in verschiedenen Szenarien zu messen.

Der Test, den wir als Beispiel verwendet haben, spiegelt nicht genau das Verwendungsmuster eines normalen Benutzers wider. JMeter verfügt jedoch über die Tools, um eine Reihe von Tests durchzuführen, die in Ihrer eigenen Umgebung nützlich sein können. Beispielsweise kann JMeter so konfiguriert werden, dass ein Benutzer sich bei Ihrer Anwendung anmeldet, clientseitig zwischengespeichert wird und Benutzersitzungen mit URL-Umschreibung verarbeitet werden. Es gibt viele andere integrierte Sampler, Listener und Konfigurationstools, mit denen Sie das gewünschte Szenario erstellen können. Zusätzlich gibt es JMeter-Plugins zur Verbesserung der Funktionalität, die unter http://jmeter-plugins.org/ heruntergeladen werden können.