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 ↑ Bild zur Zugriffssteuerung Offizielle Seite
Es war eine lange Geschichte, eine einfache Verwendung einzuführen, daher werde ich diesmal die praktische Verwendung erklären.
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. .. ..
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.
Wenn Apache gestoppt wird, unterscheidet sich der Startvorgang vom vorherigen. Lassen Sie ihn daher als Erinnerung.
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.
$ 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.
$ 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.)
$ 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.
Am Beispiel von Amazon verwenden die meisten Benutzer die Website gemäß dem folgenden Ablauf.
In diesem Muster wird beschrieben, wie Sie die Last unter der Annahme anpassen, dass ein Benutzer denselben Seitenübergang endlos wiederholt.
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.
Seite 01 *
Seite 02 *
Seite 03 *
Die Lademenge wird geändert.
Setzen Sie die Anzahl der Threads (Parallelitätsgrad) auf 1.
Sie konnten fast gleichmäßig auf die drei URLs zugreifen. (Obwohl es nicht ganz gleichmäßig ist, ist ThroughputShapingTimer spielerisch, bitte verzeihen Sie mir)
$ 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.
$ 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.
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.
Stellen Sie die Anzahl der Threads (Parallelitätsgrad) auf 3 ein.
Auch diesmal konnten Sie fast gleichmäßig auf die drei URLs zugreifen.
$ 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.
$ 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.
Bis zum letzten Mal habe ich die folgenden Muster ausprobiert. (Muster 1)
Fügen Sie diesmal die folgenden Bildschirmübergänge als weitere Thread-Gruppe hinzu. (Muster 2)
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.
(Muster 1) * Wie beim letzten Mal
(Muster 2)
--5 Benutzer --Seite 11-> Seite 12-> Seite 13 --50RPS (RequestPerSecond) tritt kontinuierlich auf
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.
Ä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
Machen Sie es gleichmäßig bei 50 U / min.
Sie können für jede der Gewindegruppen 1 und 2 eine gleichmäßige Last aufrechterhalten.
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.
Passen Sie das Zeichnungsintervall des JMeter-Berichts an
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.
Öffnen Sie das Menü zur Berichterstellung Wählen Sie in der Menüleiste "Extras" -> "HTML-Bericht erstellen".
Geben Sie die Informationen ein, die zum Generieren des Berichts erforderlich sind 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
Erstellen Sie einen Bericht Klicken Sie unten auf Bericht erstellen und überprüfen Sie ihn, um die Generierung abzuschließen.
Öffnen Sie den generierten Bericht in Ihrem Browser
Öffnen Sie index.html
, da der Bericht an dem zuvor im Ausgabeverzeichnis angegebenen Speicherort erstellt wurde.
Übergang zum Zieldiagramm Wählen Sie "Durchsatz".
Übergang zum Zieldiagramm Wählen Sie "Transaktionen pro Sekunde".
Beeindruckt von der schönen Grafik
Sie können die Wellenform genau so zeichnen, wie sie mit ThroughputShapingTimer
festgelegt wurde! !!
** Herzlichen Glückwunsch, Sie sind auch ein JMeter-Meister! ** ** **
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.
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.
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)
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.
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.
ThrouputShapingTimer JMeter generating-dashboard
Recommended Posts