[JAVA] Stellen Sie die Zugriffslast ein, die mit JMeter grafisch geändert werden kann (Teil 2).

Einführung

Letztes Mal habe ich ThroughputShapingTimer (Plug-In) in JMeter installiert. Ich erklärte, wie man die Lastmenge grafisch einstellt. Legen Sie die Zugriffslast fest, die mit JMeter (Teil 1) grafisch geändert werden kann sample_image ↑ Bild zur Zugriffssteuerung Offizielle Seite

Es war eine lange Geschichte, eine einfache Verwendung einzuführen, daher werde ich diesmal die praktische Verwendung erklären.

Letzte Zusammenfassung

Herr A, der von seinem Chef mit dem Leistungstest der Website beauftragt wurde. Als Antwort auf den unvernünftigen Vorwand des Chefs, der sagte: "Ich möchte den Anstieg des Zugriffs testen, wenn ich auf Twitter surre." Mit ThroughputShapingTimer kann Herr A jetzt den Test durchführen, der die Erwartungen mit JMeter erfüllt.

Herr A hat den Test jedoch nur auf einer einzigen Seite überprüft. Er bemühte sich, auf der Grundlage seiner Website-Besuche komplexere Testszenarien zu erstellen. .. ..

Versuchen Sie es mit dem Throughput Shaping Timer (Advanced Edition).

Mit dieser kleinen Geschichte werde ich das Testmuster und die Erstellung des Testszenarios von JMeter sofort erklären.

In diesem Artikel werden die folgenden drei Testmuster für den Fluss von Sprung, Schritt und Sprung vorgestellt.

Umweltinformationen

Umwelterholung

Wenn Apache gestoppt wird, unterscheidet sich der Startvorgang vom vorherigen. Lassen Sie ihn daher als Erinnerung.

Kommunikationsbestätigung

Sie können dies auch überprüfen, indem Sie eine Anfrage von JMeter senden. Hier überprüfen wir dies jedoch mit dem Befehl CURL.

$ curl http://localhost:8080/index.html
curl: (7) Failed to connect to localhost port 8080: Connection refused

Wenn es "Fehlgeschlagen" wird, bedeutet dies, dass Sie nicht mit dem Apache kommunizieren können, den Sie zuletzt verwendet haben.

Überprüfen Sie den Status des Containers

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS                  PORTS               NAMES
e2dc7c3714ee        httpd:2.4           "httpd-foreground"   6 days ago          Exited (0) 5 days ago                       my-apache-app

Da "Status" "Beendet" ist, können Sie sehen, dass sich der Container im gestoppten Zustand befindet (normal).

Wenn es "Up" ist, bedeutet dies, dass es sich in einem hängenden Zustand befindet. Halten Sie den Container also einmal an.

Behälter anhalten (Referenz)

$ docker stop e2dc7c3714ee

Geben Sie die Container-ID an und stoppen Sie. Überprüfen Sie nach dem Ausführen des Befehls den Containerstatus erneut und bestätigen Sie, dass er "Beendet" ist. (Wenn es nicht funktioniert, starten Sie den PC neu.)

Container starten

$ docker start e2dc7c3714ee
e2dc7c3714ee
$ docker ps -a             
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                                           NAMES
e2dc7c3714ee        httpd:2.4           "httpd-foreground"   6 days ago          Up 3 seconds        0.0.0.0:8080->80/tcp, 0.0.0.0:32772->8080/tcp   my-apache-app
$ curl http://localhost:8080/index.html
hello

Sie sind jetzt bereit.

Führen Sie seriell ein Bildschirmübergangsmuster aus

Am Beispiel von Amazon verwenden die meisten Benutzer die Website gemäß dem folgenden Ablauf.

  1. Zeigen Sie die obere Seite an
  2. Wählen Sie ein Produkt aus
  3. Kaufen

In diesem Muster wird beschrieben, wie Sie die Last unter der Annahme anpassen, dass ein Benutzer denselben Seitenübergang endlos wiederholt.

Situationseinstellungen

Drücken Sie den Zugriffsfluss mit JMeter aus

Verwenden Sie die zuletzt erstellte Thread-Gruppe Da wir den Inhalt dieses Mal nicht für den Test vorbereitet haben, greifen wir auf drei Arten von URLs zu, indem wir auf denselben HTML-Code mit unterschiedlichen Abfragezeichen zugreifen.

Stellen Sie ThroughputShapingTimer ein

スクリーンショット 2020-10-18 22.17.48.png

Die Lademenge wird geändert.

Legen Sie eine Thread-Gruppe fest

スクリーンショット 2020-10-18 22.43.35.png

Setzen Sie die Anzahl der Threads (Parallelitätsgrad) auf 1.

Führen Sie JMeter aus

スクリーンショット 2020-10-18 22.22.39.png

Sie konnten fast gleichmäßig auf die drei URLs zugreifen. (Obwohl es nicht ganz gleichmäßig ist, ist ThroughputShapingTimer spielerisch, bitte verzeihen Sie mir)

Apache-Protokollanalyse

 $ docker logs e2dc7c3714ee | tail -1094 | awk '{print $4}' | sed 's_\[18/Oct/2020:__' | uniq -c
〜〜〜
  16 13:20:00
  14 13:20:01
  16 13:20:02
  14 13:20:03
  16 13:20:04
  14 13:20:05
  15 13:20:06
  26 13:20:07
  38 13:20:08
  50 13:20:09
  63 13:20:10
  75 13:20:11
  63 13:20:12
  51 13:20:13
  39 13:20:14
  27 13:20:15
  16 13:20:16
  14 13:20:17
  15 13:20:18
  14 13:20:19
〜〜〜

Es stieg von 15 U / min auf 75 U / min und kehrte auf 15 U / min zurück.

Apache-Protokollanalyse (bestätigen Sie, dass es seriell ist)

 $ docker logs e2dc7c3714ee | tail -10 | awk '{print $4, $7}'
[18/Oct/2020:13:20:36 /index.html?test02
[18/Oct/2020:13:20:36 /index.html?test03
[18/Oct/2020:13:20:36 /index.html?test01
[18/Oct/2020:13:20:36 /index.html?test02
[18/Oct/2020:13:20:36 /index.html?test03
[18/Oct/2020:13:20:36 /index.html?test01
[18/Oct/2020:13:20:36 /index.html?test02
[18/Oct/2020:13:20:36 /index.html?test03
[18/Oct/2020:13:20:36 /index.html?test01
[18/Oct/2020:13:20:36 /index.html?test02

Sie können sehen, dass der Zugriff in der Reihenfolge von Seite 01-> Seite 02-> Seite 03 erfolgt.

Führen Sie ein Bildschirmübergangsmuster parallel aus

Beim letzten Mal habe ich die Last unter der Annahme angepasst, dass ein Benutzer denselben Seitenübergang endlos wiederholt, es sich jedoch nicht um eine tatsächliche Website handeln kann.

Ich werde erklären, wie die Lastmenge unter der Annahme angepasst wird, dass drei Benutzer zur gleichen Zeit denselben Bildschirmübergang wie beim letzten Mal durchführen.

Situationseinstellungen

Legen Sie eine Thread-Gruppe fest

スクリーンショット 2020-10-18 23.41.35.png

Stellen Sie die Anzahl der Threads (Parallelitätsgrad) auf 3 ein.

Führen Sie JMeter aus

スクリーンショット 2020-10-18 23.45.47.png

Auch diesmal konnten Sie fast gleichmäßig auf die drei URLs zugreifen.

Apache-Protokollanalyse

 $ docker logs e2dc7c3714ee | tail -1082 | awk '{print $4}' | sed 's_\[18/Oct/2020:__' | uniq -c
〜〜〜
  14 14:44:50
  15 14:44:51
  14 14:44:52
  15 14:44:53
  15 14:44:54
  14 14:44:55
  16 14:44:56
  14 14:44:57
  16 14:44:58
  13 14:44:59
  28 14:45:00
  38 14:45:01
  50 14:45:02
  65 14:45:03
  75 14:45:04
  63 14:45:05
  51 14:45:06
  37 14:45:07
  28 14:45:08
  15 14:45:09
  15 14:45:10
  15 14:45:11
  15 14:45:12
  15 14:45:13
〜〜〜

Es stieg von 15 U / min auf 75 U / min und kehrte auf 15 U / min zurück.

Apache-Protokollanalyse (bestätigen Sie, dass sie parallel ist)

 $ docker logs e2dc7c3714ee | tail -10 | awk '{print $4, $7}'
[18/Oct/2020:14:45:29 /index.html?test03
[18/Oct/2020:14:45:29 /index.html?test02
[18/Oct/2020:14:45:29 /index.html?test01
[18/Oct/2020:14:45:29 /index.html?test02
[18/Oct/2020:14:45:29 /index.html?test03
[18/Oct/2020:14:45:29 /index.html?test02
[18/Oct/2020:14:45:29 /index.html?test03
[18/Oct/2020:14:45:29 /index.html?test01
[18/Oct/2020:14:45:29 /index.html?test03
[18/Oct/2020:14:45:29 /index.html?test01

Im Vergleich zur vorherigen Zeit liegt die Zugriffsreihenfolge nicht mehr in der Reihenfolge von Seite 01-> Seite 02-> Seite 03. Sie können sehen, dass drei Benutzer gleichzeitig zugegriffen haben und die Reihenfolge geändert wurde.

Führen Sie mehrere Bildschirmübergangsmuster parallel aus

Bis zum letzten Mal habe ich die folgenden Muster ausprobiert. (Muster 1)

  1. Zeigen Sie die obere Seite an
  2. Wählen Sie ein Produkt aus
  3. Kaufen

Fügen Sie diesmal die folgenden Bildschirmübergänge als weitere Thread-Gruppe hinzu. (Muster 2)

  1. Zeigen Sie die obere Seite an
  2. Wählen Sie ein Produkt aus
  3. Wählen Sie andere empfohlene Produkte aus

Diesmal (Muster 1) Drei Benutzer führen gleichzeitig Bildschirmübergänge durch (Muster 2) Fünf Benutzer führen gleichzeitig Bildschirmübergänge durch Ich werde erklären, wie die Lastmenge vor Ort angepasst wird.

Situationseinstellungen

(Muster 1) * Wie beim letzten Mal

(Muster 2)

--5 Benutzer --Seite 11-> Seite 12-> Seite 13 --50RPS (RequestPerSecond) tritt kontinuierlich auf

Drücken Sie den Zugriffsfluss mit JMeter aus

Die zuletzt erstellte Thread-Gruppe wird verwendet.

Dupliziere und platziere die Thread-Gruppe wie in der Abbildung unten gezeigt. Platzieren Sie den Statistikbericht in derselben Hierarchie wie die Thread-Gruppe.

スクリーンショット 2020-10-19 2.53.12.png

Ändern Sie die duplizierten Einstellungen wie folgt.

Fadengruppe: Anzahl der Threads: 5 HTTP-Anfrage (test11): Pfad: /index.html? Test11 HTTP-Anfrage (Test12): Pfad: /index.html? Test12 HTTP-Anfrage (test13): Pfad: /index.html? Test13

Stellen Sie ThroughputShapingTimer ein

スクリーンショット 2020-10-19 23.54.09.png

Machen Sie es gleichmäßig bei 50 U / min.

Führen Sie JMeter aus

スクリーンショット 2020-10-20 0.13.33.png

Sie können für jede der Gewindegruppen 1 und 2 eine gleichmäßige Last aufrechterhalten.

Erstellen Sie einen JMeter-Bericht

Da der Testinhalt diesmal kompliziert ist, ist es schwierig zu bestätigen, dass er wie erwartet funktioniert, indem das Apache-Protokoll analysiert wird. Lassen Sie uns einen Bericht mit der Standardfunktion von JMeter ausgeben und das Ergebnis überprüfen.

  1. Passen Sie das Zeichnungsintervall des JMeter-Berichts an スクリーンショット 2020-10-20 1.47.27.png Plötzlich ist dies ein Vorgang, der normalerweise nicht durchgeführt wird. .. .. Der Bericht zeichnet das Diagramm standardmäßig jede Minute. Da die Testzeit diesmal sehr kurz ist, werden wir auch das Zeichenintervall des Diagramms verkürzen.
    Öffnen Sie <das Verzeichnis, in das Sie JMeter extrahiert haben> / apache-jmeter-5.3 / bin / user.properties. Um die Zeile 76 herum gibt es einen Einstellwert für das Zeichenintervall des Diagramms mit dem Namen "jmeter.reportgenerator.overall_granularity". Kommentieren Sie ihn aus und ändern Sie ihn von 60000 Millisekunden auf 1000 Millisekunden.

  2. Öffnen Sie das Menü zur Berichterstellung スクリーンショット 2020-10-20 1.28.33.png Wählen Sie in der Menüleiste "Extras" -> "HTML-Bericht erstellen".

  3. Geben Sie die Informationen ein, die zum Generieren des Berichts erforderlich sind スクリーンショット 2020-10-20 1.31.41.png Ergebnisdatei (csv oder jtl): Name der Ausgabedatei, die im statistischen Bericht angegeben ist Datei user.properties: Unter bin (Datei früher umgeschrieben) Ausgabeverzeichnis: Überall ist OK

  4. Erstellen Sie einen Bericht スクリーンショット 2020-10-20 1.32.35.png Klicken Sie unten auf Bericht erstellen und überprüfen Sie ihn, um die Generierung abzuschließen.

Überprüfen Sie den JMeter-Bericht

  1. Öffnen Sie den generierten Bericht in Ihrem Browser スクリーンショット 2020-10-20 1.52.04.png Öffnen Sie index.html, da der Bericht an dem zuvor im Ausgabeverzeichnis angegebenen Speicherort erstellt wurde.

  2. Übergang zum Zieldiagramm スクリーンショット 2020-10-20 1.53.28.png Wählen Sie "Durchsatz".

  3. Übergang zum Zieldiagramm スクリーンショット 2020-10-20 1.55.11.png Wählen Sie "Transaktionen pro Sekunde".

  4. Beeindruckt von der schönen Grafik スクリーンショット 2020-10-20 1.56.37.png Sie können die Wellenform genau so zeichnen, wie sie mit ThroughputShapingTimer festgelegt wurde! !!
    ** Herzlichen Glückwunsch, Sie sind auch ein JMeter-Meister! ** ** **

Später reden

Herr A "Endlich ist die Einstellung von JMter abgeschlossen!" Boss "Danke, ich überlasse diesen Leistungstest Herrn A. Viel Glück!" Herr A "Ja!"

Herr A ist bereit, die Leistung der zu testenden Webanwendung zu messen. Aber dies war der Beginn der wahren Hölle. Herr A, der noch unerfahren ist, konnte die vielen Probleme, die in der Zukunft auftreten würden, noch nicht vorhersagen. .. ..

Ich habe keine Fortsetzung vor, aber wenn ich es wage, ihr beim nächsten Mal einen Titel zu geben ** Nächstes Mal: "Es gibt einige Leistungs- und Produktionsfehler." **

Leistungstests sind nur ein Mittel, um Probleme zu finden. Die Abkürzung zu einem Happy End besteht darin, dass Ihr Chef den Prüfungsplan von A zu einem angemesseneren führt und dass A die an verschiedenen großen und kleinen Problemen beteiligten Personen einbezieht.

Abgesehen davon hoffe ich, dass dieser Artikel die Anzahl der Menschen erhöht, die ein reicheres JMeter-Leben führen können.

Appendix

Während ich den Artikel schreibe, werde ich die Punkte, von denen ich dachte, dass ich über diesen Punkt stolpern könnte, im QS-Format zusammenfassen. Wenn Sie weitere Bedenken haben, kommentieren Sie bitte.

Q1 Die eingestellte Lastmenge wird nicht erreicht

Herr A "Die Einstellung ist korrekt, aber die erwartete Last wird nicht erreicht ... Sie liegt geringfügig unter dem eingestellten Wert ..." Boss "Technische Daten?"

Bei dieser Überprüfung war dies kein Problem, da nur eine geringe Last aufgebracht wurde, der gemessene Wert jedoch geringfügig unter der Einstellung von etwa mehreren hundert U / min liegt.

Da es sich um OSS handelt, übersehen wir es und setzen eine etwas größere Last unter der Annahme, dass es niedriger sein wird.

Q2 Die eingestellte Last wird überhaupt nicht erreicht. .. ..

Herr A "Ich habe die Ladungsmenge entsprechend der tatsächlichen Produktion eingestellt, aber der gemessene Wert ist erheblich niedriger ... JMeter gibt auch einen Fehler aus ..." Boss "Ich kann nicht sagen, ohne den Fehler zu sehen, aber JMeter hat möglicherweise sein Limit erreicht."

JMeter läuft auf Java und verbraucht daher viele Ressourcen. Versuchen Sie zunächst, den JMeter zugewiesenen Speicher zu erhöhen.

Referenz: Was tun, wenn OutOfMemory in JMeter auftritt

Wenn genügend Speicher vorhanden ist, die erwartete Last jedoch nicht erreicht wird, wurde möglicherweise die maximale Anzahl von Betriebssystemverbindungen erreicht. Erhöhen wir die maximale Anzahl von Dateideskriptoren. (Wenn Sie sich nicht sicher sind, bitten Sie die für die Infrastruktur zuständige Person, dies zu tun!)

Referenz: [Bearbeiten Sie /etc/security/limits.conf anstelle von ulimit -n, wenn Sie die Einstellungen nach dem Neustart / Herunterfahren beibehalten möchten ("Zu viele geöffnete Dateien" "Fehler-Gegenmaßnahmen" Zu viele geöffnete Dateien ")](https :: //qiita.com/neko_the_shadow/items/841bf59c4f80588baad7)

F3 Egal wie sehr ich es auch versuche, die erwartete Last kommt nicht heraus. .. ..

Herr A "Ich habe verschiedene Einstellungen überprüft, aber die der tatsächlichen Produktion entsprechende Last kommt nicht heraus ..." Boss "Vielleicht ist es das Limit des JMeter-Servers ..."

In einem großen System ist die Lastmenge, die von einem JMeter ausgegeben werden kann, begrenzt, sodass die Verarbeitung auf mehrere Server verteilt wird. (Ich kann es nicht bedingungslos sagen ...) Verteilen wir die Verarbeitung von JMeter nach einer der folgenden Methoden.

Beispiel: Wenn die Verarbeitung auf 10 JMeter verteilt ist

Referenz: JMeter Master / Slave-Umgebung unter AWS (CentOS 7) erstellen FireWall und KeyStore sind die Fehler

Der Vorteil der Master-Slave-Konfiguration besteht darin, dass die Ausführungsprotokolle im Master zusammengefasst werden, was das Erstellen von Berichten erleichtert. Die Kosten sind jedoch ein Nachteil, da die Anzahl der Serverinstanzen um eins erhöht wird.

schließlich

Es ist lange her, aber dieser Artikel ist vollständig.

Mir wurde klar, dass das Schreiben eines Artikels ziemlich schwierig ist.

Bis jetzt haben mir Qiita und andere oft geholfen, aber irgendwie habe ich es einfach überflogen. Von nun an möchte ich den Artikel lesen und ein bisschen mehr beißen.

Dieses Mal habe ich einen Artikel über Leistungstests veröffentlicht, aber mein Hauptgeschäft ist das Anpassen des Java-Frameworks. (Frühlingsrahmen usw.) Da das Java-Framework viele geschäftsbezogene Inhalte enthält und es schwierig ist, Artikel zu schreiben, Ich denke, es könnte möglich sein, diese Gelegenheit zu nutzen, um Felder herauszufordern, die bisher nicht bearbeitet wurden.

Ich möchte eine Webseite mit GitHub-Seiten und GitHub-Aktionen erstellen. Foundation-> Java Framework Ich habe den Bildschirm noch nie berührt, daher werde ich mein Bestes tun, um nicht zu verschwinden.

Referenz

ThrouputShapingTimer JMeter generating-dashboard

Recommended Posts

Stellen Sie die Zugriffslast ein, die mit JMeter grafisch geändert werden kann (Teil 2).
Stellen Sie die Zugriffslast ein, die mit JMeter grafisch geändert werden kann (Teil 1).
Vier Reihen mit Schwerkraft, die auf der Konsole gespielt werden können
[Rails] "Pry-Rails", die beim Speichern mit der create-Methode verwendet werden können
Beschreibung, die es nur für Poster zugänglich macht
Organisieren Sie Methoden, die mit StringUtils verwendet werden können
Über die Sache, dass hidden_field wahnsinnig benutzt werden kann
Lasttest mit JMeter
Lernen Sie Ruby mit AtCoder Anfänger Auswahl [Einige Summen] Erhöhen Sie die Methoden, die verwendet werden können
Nur der Stream der obersten Ebene kann mit Java Stream parallelisiert werden.
Erstellen Sie ein Seitensteuerelement, das mit RecyclerView verwendet werden kann
Firebase-Realtime-Datenbank für Android, die mit Kopie verwendet werden kann
SwiftUI-Ansicht, die in Kombination mit anderen Frameworks verwendet werden kann
Zusammenfassung der JDKs, die mit Homebrew installiert werden können (Stand November 2019)