Performance-Messung mit JMeter und Magento Performance Toolkit

29.03.2021
extendedLogo

Man kann es gar nicht oft genug betonen: Erfolgreiche Onlineshops bieten nicht nur ein umfangreiches, attraktives Sortiment, sondern sind vor allem performant.

Warum? Eine hohe Performance ist wichtig für eine gute User Experience (UX), denn Onlineshop-Käufer erwarten umgehende Ergebnisse bei Anfragen, Kaufvorgängen, Suchaufträgen etc. Nur wenn die Schnelligkeit spürbar ist – und wir sprechen hier teilweise von (Milli)Sekunden – führt dies im Shop zu einer höheren Conversion Rate und damit zu mehr Umsatz.

Was sind Apache JMeter und das Magento 2-Performance Toolkit?

Um die Performance eines Onlineshops zu messen, gibt es verschiedene Möglichkeiten – wir fokussieren uns in diesem Blogartikel auf die Durchführung von Lasttests. Wir nutzen dafür Apache JMeter sowie das Magento 2-Performance Toolkit und verwenden die vorgegebenen Testfälle für die Messung. Ziel einer solchen Messung ist die Erstellung eines Benchmarks, also die Durchführung einer Reihe von simulierten Operationen mit vergleichbaren Ergebnissen bei unterschiedlichen Parametern.

Apache JMeter

Bei Apache JMeter handelt es sich um eine Open Source-HTTP/S Lastgenerator Software, die in Java geschrieben wurde. Mit dieser Software können Lasten für verschiedene Szenarien simuliert und Leistungsdaten auf verschiedene Arten ausgegeben werden, beispielsweise als CSV- oder XML-Dateien, aber auch als Diagramme bzw. Grafiken.

Entwickelt wurde die Software für das Testen von Webanwendungen. Nicht nur das Funktionsverhalten kann hiermit getestet, sondern auch die Leistung einer Magento-Site sowie die tatsächliche Leistungsfähigkeit der Server gemessen werden.

Sie können die kostenlose Software hier downloaden. Bitte beachten Sie, dass dafür Java 8 oder höher benötigt wird. Zusätzlich benötigen sie JSON-Plugins für die Ausführung der Tests.

Führen Sie im Anschluss folgende Schritte aus:

  • Laden Sie plugins-manager.jar herunter und legen Sie es in das Verzeichnis {JMeter Pfad}/lib/ext. Starten Sie dann JMeter neu.
  • Folgen Sie den Anweisungen auf der Seite “JMeter Plugins Manager”, um den Plugins-Manager zu öffnen.
  • Wählen Sie JSON Plugins aus den auf der Registerkarte "Verfügbare Plugins" aufgeführten Plugins aus und klicken Sie dann auf die Schaltfläche "Änderungen übernehmen und JMeter neu starten".

Magento Performance Toolkit

Das Magento Performance Toolkit inklusive Metriken ist offizieller Bestandteil von Magento 2 (Bitte beachten Sie: Sie können es in dieser Form nicht für einen Magento 1-Shop nutzen). Mit diesem Toolkit können Sie die Performance einer Magento-Installation, die Gesamtkapazität des Servers sowie die Auswirkungen von etwaigen Anpassungen testen.

Außerdem können Sie Beispieldaten zum Testen der Performance generieren, mit denen dann JMeter-Szenarien laufen können. Bei einem kombinierten Benchmark werden so beispielsweise über 290 verschiedene Seitenaktivitäten imitiert.

Bei dem individuellen Shop-Datengenerator haben Sie die Auswahl zwischen vier Shopprofilen, sodass die Testumgebung passend zum eigenen Onlineshop gewählt werden kann:

  • “Small”
    • 1 Website / 800 Produkte / 30 Kategorien
    • 80 Bestellungen / 200 Kunden / Attribute-Sets 10
  • “Medium”
    • 3 Websites / 24.000 Produkte / 300 Kategorien
    • 50.000 Bestellungen / 2.000 Kunden / Attribute-Sets 30
  • “Large”
    • 5 Websites / 300.000 Produkte / 3000 Kategorien
    • 100.000 Bestellungen / 5.000 Kunden / Attribute-Sets 50
  • “Extra Large”
    • 5 Websites / 600.000 Produkte / 6000 Kategorien
    • 150.000 Bestellungen / 10.000 Kunden / Attribute-Sets 100

Ein Demo-Shop, der mit einem “Small”-Shopprofil erstellt wurde, umfasst unterschiedliche Attribute-Sets, die auch jeder individuelle Shop unterstützen sollte.

Übrigens würden wir aus unserer Erfahrung heraus vom Aufsetzen eines “Extra Large”-Szenarios absehen, da es zum einen unrealistisch für die meisten Onlineshops ist und zum anderen der Aufbau dieses Szenarios bis zu drei Stunden dauern kann.

Vorbereitung der Messung

Zur Vorbereitung der Messung benötigen Sie einen Computer, auf dem das JMeter Lasttest-Tool ausgeführt werden kann und einen Webserver, gegen den der Lasttest durchgeführt wird. Wir raten davon ab, die Tests auf einem Produktionsserver durchzuführen, außer es ist sichergestellt, dass dieser die Last während des Tests bewältigen kann.

Beachtet werden sollte, dass die Ergebnisse durch viele Faktoren verzerrt werden können, u.a. durch RAM und CPU. Aus diesem Grund sollten die Tests daher im nicht-grafischen Modus ausgeführt werden, oder die Lastgenerierung auf mehrere Ressourcen verteilt werden. Außerdem bietet sich die Einrichtung identischer Testseiten ohne reale Produktdaten an, um die gleiche Datenbasis für den finalen Vergleich zu haben.

Folgende technischen Voraussetzungen sollten vor der Messung gegeben sein:

  • Für das Lasttest-Tool: Apache JMeter Version 2.13 r1665067
  • Die für die Ausführung von JMeter erforderlichen Pakete: Oracle Java oder OpenJDK (6 oder höher)
  • Für die Webanwendung: Magento-Anwendung auf einem Webserver

Installation ohne Beispieldaten installieren

Wie bereits im vorhergehenden Abschnitt angesprochen, sollten Sie eine Magento-Installation ohne Beispieldaten durchführen, um einer Vergleichbarkeit der Ergebnisse zu garantieren. Wenn bereits ein Storefront mit Beispieldaten existiert, empfehlen wir Ihnen die Deinstallation nicht benötigter Beiträge (Anleitung für die Deinstallation).

Bei unserem Test haben wir die leere Seite, mit den in der Datenbank gesetzten globalen Parametern, mit dem Composer über die Konsole erstellt.

php7.3 bin/magento cache:flush
php7.3 bin/magento setup:upgrade
php7.3 bin/magento setup:di:compile
php7.3 bin/magento deploy:mode:set production
php7.3 bin/magento cache:flush
php7.3 bin/magento setup:upgrade
php7.3 bin/magento setup:di:compile
php7.3 bin/magento config:set catalog/frontend/flat_catalog_product 1
php7.3 bin/magento config:set catalog/frontend/flat_catalog_category 1
php7.3 bin/magento config:set dev/js/minify_files 1

Als Ergebnis der aufgeführten Schritte erhalten Sie ein Storefront mit generischen Kategorien inklusive Platzhalterprodukten:

Im Anschluss sollten Sie die Magento-Site konfigurieren. Hierfür empfehlen wir Ihnen folgende Einstellung vorzunehmen:

php7.3 bin/magento config:set general/locale/timezone Europe/Berlin
php7.3 bin/magento config:set general/locale/weight_unit kgs
php7.3 bin/magento config:set general/locale/firstday 1
php7.3 bin/magento config:set general/locale/code en_US
php7.3 bin/magento config:set system/smtp/set_return_path 2
php7.3 bin/magento config:set system/smtp/return_path_email service@test.de
php7.3 bin/magento config:set dev/css/minify_files 1
php7.3 bin/magento config:set web/seo/use_rewrites 1

Installation von JMeter

Nach der Installation der Testumgebung erfolgt die Installation von JMeter auf dem Rechner, der für die Erzeugung der Testlast verwendet wird. JMeter ist dabei für alle Betriebssysteme verfügbar, die eine Java-Umgebung nutzen.

TIPP: Wir haben bei unseren Tests festgestellt, dass es von Vorteil ist, wenn das installierte JMeter etwas älter ist. Leider hat diese Version jedoch eine fehlerhafte JavaJRR-Erkennung. Mit folgenden Schritten schaffen Sie Abhilfe:

  1. Öffnen Sie die Datei "bin/jmeter2 im JMeter-Ordner als Shell Script.
  2. Ermitteln Sie Ihre Version von Java mit java --version
  3. Editieren Sie MINIMAL_VERSION=1.8.0 in Zeile 28 auf z.B. MINIMAL_VERSION=11.0.10

Magento-Benchmark mit JMeter

JMeter ist nun installiert und bereit, Lasttests durchzuführen. Für die Lasttests können dabei verschiedene Testpläne für die Ausführung erstellt werden. So können Sie für Ihre Testpläne sowohl Szenarien als registrierter Kunden, d.h. es ist eine authentifizierte Anmeldung im System erforderlich, oder auch als Gast, ohne Anmeldung in der Webanwendung, erstellen.

Beispiele für solche Szenarien sind:

  • Blättern durch den Produktkatalog
  • Besuch einer Produktbeschreibungsseite
  • Hinzufügen des Produkts zum Warenkorb
  • Zur Kasse gehen und Bestellung aufgeben

Wir haben bei unseren Tests den Combined Benchmark eingesetzt, der eine Vielzahl verschiedener Szenarien umfasst. Hierbei werden beispielsweise auch Produktaktualisierung und Aktivitäten im Backend korrekt abgebildet.

Tests durchführen

Nach der Installation von JMeter sollte die benchmark.jmx zusammen mit den Unterordnern in den JMeter-Ordner kopiert werden. In unserem Fall starten wir JMeter in einem gesondertem Ordner.

Sobald der Test ausgeführt wurde, werden die Testergebnisse als HTML exportiert.

Test-Szenarios

Es gibt zwei mögliche Testszenarien, erstens das Szenario der steigenden Belastung und zweitens die Lasttests, bei denen die Auslastung in realistischen Szenarios getestet wird.

Bei letzteren, den Lasttests, empfiehlt es sich, sich über SSH anzumelden, um zu überprüfen, inwiefern CPU- und Speichernutzung steigen. Wichtig hierbei zu wissen ist, dass bei stetiger Lasterhöhung bei einem bestimmten Wert für "No. of threads" (Anzahl der Threads) der View Result Tree mit einem Fehler angezeigt wird. Dies kann dann als Systemzusammenbruchspunkt bezeichnet werden.

Beim Szenario der steigenden Belastung hingegen wird die Last erhöht, indem die Anzahl der Threads, der Benutzer, erhöht wird.

Auswertungen mit JMeter

Mit dem Ergebnis der Auswertungen erhalten Sie Metriken, anhand derer beurteilt werden kann, wie sich Änderungen auf die Performance und Gesamtauslastung des Servers auswirken. Zudem sind HTML-Reports mit Graphen und Tabellen abrufbar, genauso wie APDEX-Berechnungen und Response Time Auswertungen.

Anzeigenversionen

Für die Auswertungen können verschiedene Ansichten gewählt werden:

  • Aggregate Report-Ansicht
  • Results Tree-Ansicht
  • Grafische Ergebnisse
  • Detaillierte URL-Reports (Legacy)
  • Zusammenfassungs-Reports (Legacy)

Wir zeigen Ihnen im Folgenden eine kurze Übersicht zu den beiden erstgenannten:

Aggregate Report-Ansicht

Wie der Name vermuten lässt, erhalten Sie bei dieser Ansicht aggregierte Informationen über alle Anfragen, einschließlich:

  • Anzahl Anfragen
  • Minimum
  • Maximum
  • Durchschnitt
  • Fehlerrate
  • Ungefährer Durchsatz

Results Tree-Ansicht

Diese Ansicht empfiehlt sich für Informationen über response times, header und response codes. Diese Ansicht ist besonders nützlich für das debuggen von Szenarien, sollte aber während des Lasttests deaktiviert werden, da er viele Ressourcen verbraucht

Performance-Benchmark bei maxcluster

Im Folgenden geben wir Ihnen einen Überblick, wie wir unsere aktuellen Lasttests bei maxcluster durchgeführt haben und zu welchen Ergebnissen wir bei den Benchmarks gekommen sind.

Settings

Aufbau Demo-Shop für maxcluster-Benchmark

Wir haben für unseren Demo-Shop einen Standard Magento 2.3 Shop gewählt, inklusive des von uns entwickelten Performance-Patches. Wir haben dafür die Standardeinstellungen übernommen, d.h. wir haben weder Redis noch Elasticsearch eingebunden. Außerdem haben wir keinerlei Optimierungen eingesetzt. Den InnoDB Cache Size für die Datenbank haben wir “klein” gewählt.

Shopprofile

Für die zu testenden Shopprofile haben wir uns der Angaben des Magento Performance Toolkits bedient und folgende Profile gewählt:

  • “Small”
    • 1 Website / 800 Produkte / 30 Kategorien
    • 80 Bestellungen / 200 Kunden / Attribute-Sets 10
  • “Medium”
    • 3 Websites / 24.000 Produkte / 300 Kategorien
    • 50.000 Bestellungen / 2.000 Kunden / Attribute-Sets 30
  • “Large”
    • 5 Websites / 300.000 Produkte / 3000 Kategorien
    • 100.000 Bestellungen / 5.000 Kunden / Attribute-Sets 50

Web Cluster

Für unserer Hardware haben wir 8 CPU und 16 GB RAM gewählt, da man diese Konfiguration häufig bei unseren Kunden findet.

Außerdem haben wir folgende Software eingesetzt:

  • Apache 2
  • MySQL 5.7
  • PHP 7.3

Besucherverhalten

Auch beim Besucherverhalten haben wir uns an die Vorgaben des Magento Performance Toolkits gehalten und uns für den Combined Benchmark entschieden. Dieser prüft 291 verschiedene Endpoints, wobei er ein gutes Verhältnis von Frontpage- und Backendaufrufen abbildet. Mit dem Combined Benchmark erhält man zudem eine durchweg plausible Datenlage.

Lastszenarien

Um einen guten Überblick über die Performance unserer Server zu erhalten, haben wir folgende Lastszenarien geprüft:

  • 4 Threads
  • 8 Threads
  • 16 Threads

Die Hardwarekonfiguration blieb dabei unverändert bei 8 CPUs.

Unsere Learnings

Das Magento 2-Performance Toolkit benötigt einiges an Vorarbeit. Die notwendige Automatisierung und Parametrisierung können einen Entwickler zwar mehrere Tage Zeit kosten, gleichzeitig bekommt man aber ein mächtiges Werkzeug für einen professionellen Entwicklungsprozess. Es beantwortet viele Fragen zur aktuellen Leistungsfähigkeit eines Shops, gibt jedoch keine Auskunft darüber, wie man diese verbessern kann. Da auch eine Funktionsprüfung stattfindet, kann das Toolkit, je nach Fragestellung und Zielsetzung sowohl zur Qualitätssicherung als auch zur Entscheidungsfindung beitragen.

Da unsere Anforderung an die Qualität unserer Leistungen sehr hoch ist, haben wir uns entschieden, eine spezielle Software zu entwickeln, um die Ergebnisse hunderter Benchmarks vergleichen zu können.

Fazit

Mit dem Apache JMeter und dem Magento 2-Performance Toolkit bietet sich eine unkomplizierte Möglichkeit für Entwickler, die Performance eines Servers und die Leistungsfähigkeit eines Onlineshops selber zu testen.

Die Kombination ermöglicht es, Beispieldaten und laufende Testszenarien zu generieren und die Ergebnisse als Grundlage, beispielsweise für Entscheidungen hinsichtlich Serverkonfigurationen oder -einstellungen zu nutzen.

Wir empfehlen Magento 2-Entwicklern schon früh im Entwicklungsprozess mit einem Benchmark und einem Testplan ihr Projekt mit dem Magento 2-Performance Toolkit zu bewerten. Der APDEX kann dafür als Grundlage dienen. Wenn weitere Features oder Extensions in den Shop eingebaut werden, können so die Auswirkungen der Veränderungen auf die Performance innerhalb von Minuten überprüft und gegebenenfalls Gegenmaßnahmen bei Performance-Verlust ergriffen werden. Zudem kann mit dem APDEX eine qualifizierte KPI für die Performance eines Shop formuliert werden. Dabei sollte auch die Hardware- und Softwarekonfiguration genau spezifiziert werden, denn diese haben in der Regel einen großen Einfluss auf die Benchmarkergebnisse. Die frühe Einbindung eines Testplans unterstützt das Erwartungsmanagement und sorgt für weniger Konflikte in der Endphase des Projekts.


Veröffentlicht am 29.03.2021 | NM