17. Hilfe! Mein Chef möchte, dass ich unsere Anwendung einem Belastungstest unterziehe!

Dies ist eine ziemlich offene Aussage. Es gibt eine Reihe von Fragen, die zuerst gestellt werden müssen, und zusätzlich eine Reihe von Ressourcen, die benötigt werden. Sie benötigen etwas Hardware, um die Benchmarks/Lasttests auszuführen. Eine Reihe von Tools wird sich als nützlich erweisen. Es gibt eine Reihe von Produkten, die berücksichtigt werden müssen. Und schließlich, warum ist Java eine gute Wahl, um ein Lasttest-/Benchmarking-Produkt zu implementieren?

17.1 Zu stellende Fragen

Was ist unsere erwartete durchschnittliche Anzahl von Benutzern (normale Last)?

Was ist unsere erwartete Spitzenzahl von Benutzern?

Wann ist ein guter Zeitpunkt für einen Belastungstest unserer Anwendung (dh außerhalb der Geschäftszeiten oder am Wochenende), wenn man bedenkt, dass dies sehr wohl einen oder mehrere unserer Server zum Absturz bringen kann?

Hat unsere Anwendung einen Status? Wenn ja, wie verwaltet unsere Anwendung dies (Cookies, Session-Rewriting oder eine andere Methode)?

Was soll der Test erreichen?

17.2 Ressourcen

Die folgenden Ressourcen werden sich als sehr hilfreich erweisen. Denken Sie daran, dass Sie zu diesen Ressourcen werden, wenn Sie diese Ressourcen nicht finden können . Da Sie Ihre Arbeit bereits vor sich haben, ist es wichtig zu wissen, wer die folgenden Personen sind, damit Sie sie bei Bedarf um Hilfe bitten können.

17.2.1 Netzwerk

Wer kennt unsere Netzwerktopologie? Wenn Sie auf Firewall- oder Proxy-Probleme stoßen, wird dies sehr wichtig. Außerdem wäre ein privates Testnetzwerk (das daher eine sehr geringe Netzwerklatenz haben wird) eine sehr schöne Sache. Zu wissen, wer einen für Sie einrichten kann (wenn Sie das für notwendig halten), wird sehr nützlich sein. Wenn die Anwendung nicht wie erwartet skaliert, wer kann dann zusätzliche Hardware hinzufügen?

17.2.2 Anwendung

Wer weiß, wie unsere Anwendung funktioniert? Die normale Reihenfolge ist

  • Test (geringes Volumen – können wir unsere Anwendung benchmarken?)
  • Benchmark (die durchschnittliche Anzahl der Benutzer)
  • Belastungstest (die maximale Anzahl von Benutzern)
  • destruktiv testen (was ist unsere harte Grenze?)
Der Testprozess kann von Black-Box-Tests zu White-Box-Tests fortschreiten (der Unterschied besteht darin, dass der erste keine Kenntnis der Anwendung erfordert [er wird als "Black Box" behandelt], während der zweite einige Kenntnisse der Anwendung erfordert). Es ist nicht ungewöhnlich, dass während dieses Prozesses Probleme mit der Anwendung entdeckt werden, seien Sie also darauf vorbereitet, Ihre Arbeit zu verteidigen.

17.3 Welche Plattform sollte ich verwenden, um die Benchmarks/Lasttests auszuführen?

Dies sollte ein weit verbreitetes Stück Hardware sein, mit einer Standard- (dh Vanilla-) Softwareinstallation. Denken Sie daran, wenn Sie Ihre Ergebnisse veröffentlichen, werden Ihre Kunden als Erstes einen Doktoranden einstellen, um sie zu überprüfen. Sie können es dieser Person genauso gut so einfach wie möglich machen.

Für Windows sollte mindestens Windows XP Professional verwendet werden (die anderen verwenden kein Multithreading für mehr als 50-60 Verbindungen, und Sie rechnen wahrscheinlich mit mehr Benutzern).

Gute kostenlose Plattformen sind Linux, BSDs und Solaris Intel. Wenn Sie etwas mehr Geld haben, gibt es kommerzielle Linux. Dies kann sich lohnen, wenn Sie die Unterstützung benötigen.

Untersuchen Sie für Nicht-Windows-Plattformen " ulimit -n unlimited " im Hinblick darauf, es in die Startskripts Ihres Benutzerkontos aufzunehmen ( .bashrc- oder .cshrc - Skripts für das Testkonto).

Beachten Sie auch, dass einige Linux/Unix-Editionen für die Verwendung auf Servern vorgesehen sind. Diese haben im Allgemeinen nur minimale oder keine GUI-Unterstützung. Solche Betriebssysteme sollten für die Ausführung von JMeter im CLI-Modus in Ordnung sein, aber der JMeter-GUI-Modus wird wahrscheinlich nicht funktionieren, es sei denn, Sie installieren eine minimale GUI-Umgebung.

Wenn Sie zu größeren Benchmarks/Lasttests übergehen, wird diese Plattform zum limitierenden Faktor. Es lohnt sich also, die beste Hard- und Software zu verwenden, die Ihnen zur Verfügung steht. Denken Sie daran, die Hardware-/Softwarekonfiguration in Ihre veröffentlichten Benchmarks aufzunehmen.

Wenn Sie viele Maschinen benötigen oder die Netzwerklatenz testen möchten, kann Cloud Ihnen helfen. JMeter kann einfach auf Cloud-Instanzen installiert werden, da es auf nahezu jeder in der Cloud verfügbaren Architektur läuft. JMeter wird auch in Commercial Cloud PAAS unterstützt, wenn Sie es nicht selbst verwalten möchten.

Vergessen Sie nicht den JMeter-Batch-Modus (CLI). Dieser Modus sollte aus vielen Gründen während Lasttests verwendet werden:

  • Wenn Sie einen leistungsstarken Server haben, der Java unterstützt, aber vielleicht keine schnelle Grafikimplementierung hat, oder wenn Sie sich aus der Ferne anmelden müssen.
  • Der Stapelmodus (CLI) kann den Netzwerkverkehr im Vergleich zur Verwendung einer Remote-Anzeige oder des Client-Server-Modus reduzieren.
  • Der für den GUI-Modus verwendete Java-AWT-Thread kann das Injektionsverhalten ändern, indem er manchmal blockiert
Die Stapelprotokolldatei kann dann zur Analyse in JMeter auf einer Workstation geladen werden, oder Sie können die CSV-Ausgabe verwenden und die Daten in eine Tabelle importieren.

Denken Sie daran, dass der GUI-Modus für die Skripterstellung und das Debugging dient, nicht für Lasttests

17.4 Werkzeuge

Die folgenden Tools werden sich alle als nützlich erweisen. Es lohnt sich auf jeden Fall, sich mit ihnen vertraut zu machen. Dazu sollte gehören, sie auszuprobieren und die entsprechende Dokumentation zu lesen (man-pages, info-files, application --help messages und alle mitgelieferten Dokumentationen).

17.4.1 Ping

Damit kann festgestellt werden, ob Sie Ihre Zielseite erreichen können oder nicht. Optionen können angegeben werden, so dass „ ping “ die gleiche Art von Routenberichten wie „ traceroute “ bereitstellt .

17.4.2 nslookup/dig

Während der Benutzer normalerweise eine für Menschen lesbare Internetadresse verwendet, möchten Sie möglicherweise den Overhead von DNS-Lookups vermeiden, wenn Sie Benchmarking/Lasttests durchführen. Diese können verwendet werden, um die eindeutige Adresse (gepunktetes Viereck) Ihrer Zielseite zu ermitteln.

17.4.3 Traceroute

Wenn Sie Ihre Zielseite nicht " pingen " können, kann dies verwendet werden, um das Problem zu ermitteln (möglicherweise eine Firewall oder ein Proxy). Es kann auch verwendet werden, um die gesamte Netzwerklatenz abzuschätzen (eine lokale Ausführung sollte die geringstmögliche Netzwerklatenz ergeben – denken Sie daran, dass Ihre Benutzer über ein möglicherweise stark ausgelastetes Internet laufen werden). Generell gilt: Je weniger Hopfen, desto besser.

17.5 Wie kann ich JMeter verbessern?

Es gibt viele Open-Source- und kommerzielle Anbieter, die JMeter-Plugins oder andere Ressourcen zur Verwendung mit JMeter bereitstellen. Einige davon sind im JMeter-Wiki aufgeführt. Sie sind in mehreren Kategorien aufgeführt:

  • JMeterPlugins - Plugins zur Erweiterung von JMeter
  • JMeterAddons - Addons zur Verwendung mit JMeter, zB Plugins für Browser, Maven und Jenkins.
  • JMeterServicesDienste von Drittanbietern, z. B. Cloud-basiertes JMeter
Beachten Sie, dass das Erscheinen dieser im Wiki keine Billigung durch das Apache JMeter-Projekt impliziert. Jegliche Supportanfragen sind an den entsprechenden Anbieter zu richten.

17.6 Warum Java?

Warum nicht Perl oder C?

Nun, Perl könnte eine sehr gute Wahl sein, außer dass das Benchmark-Paket ziemlich unscharfe Ergebnisse zu liefern scheint. Auch das Simulieren mehrerer Benutzer mit Perl ist ein kniffliges Unterfangen (mehrere Verbindungen können simuliert werden, indem viele Prozesse von einem Shell-Skript abgezweigt werden, aber das sind keine Threads, sondern Prozesse). Die Perl-Community ist jedoch sehr groß. Wenn Sie feststellen, dass jemand bereits etwas geschrieben hat, das nützlich erscheint, könnte dies eine sehr gute Lösung sein.

C ist natürlich eine sehr gute Wahl (sehen Sie sich das Apache ab- Tool an). Seien Sie jedoch darauf vorbereitet, den gesamten benutzerdefinierten Netzwerk-, Threading- und Zustandsverwaltungscode zu schreiben, den Sie zum Benchmarking Ihrer Anwendung benötigen.

Java bietet Ihnen (kostenlos) den benutzerdefinierten Netzwerk-, Threading- und Zustandsverwaltungscode, den Sie zum Benchmarking Ihrer Anwendung benötigen. Java kennt HTTP, FTP und HTTPS sowie RMI, IIOP und JDBC (ganz zu schweigen von Cookies, URL-Codierung und URL-Umschreibung). Darüber hinaus bietet Ihnen Java eine automatische Garbage-Collection und Sicherheit auf Bytecode-Ebene.

Go to top