Welche Art der „Rationalisierung“ tritt ein, wenn man zur Last-/Spannungserzeugung eine einzelne Maschine nutzt?

Welche Art der „Rationalisierung“ tritt ein, wenn man zur Last-/Spannungserzeugung eine einzelne Maschine nutzt?

Der Titel dieser Frage stellt mein Hauptanliegen dar, aber wenn Sie weiterlesen,FrageAbschnitt finden Sie einige Hintergrundinformationen zu unserem Setup, die relevant/nützlich sein können oder nicht.

Frage

Wir führen einen Stresstest unserer Anwendung durch mitGatlingund führen das Gatling-Szenario auf einemeinzelMaschine. Wir stellen fest, dass unsere Anwendung mit einer hohen Belastung, wie sie durch das Stresstool erzeugt wird, zurechtkommt; mit einer relativ geringen Belastung durch echte Benutzer kommt sie jedoch nicht zurecht.

Meine Frage lautet: Welche Art der Optimierung oder Rationalisierung auf Betriebssystem-/Netzwerkebene tritt auf, wenn gleichzeitige Anforderungen von einer einzelnen Maschine/einem einzelnen Betriebssystem an eine Anwendung gestellt werden, im Vergleich zu gleichzeitigen Anforderungen von mehreren Maschinen (z. B. normale Benutzer, die ihre Webbrowser verwenden)?


Hintergrund

Wir haben eine Tomcat-Anwendung, die über AJP hinter Apache sitzt, das sich selbst über Port 80 hinter einem Citrix Netscaler befindet (wir planen auch, Apache aus der Gleichung zu nehmen, aber das ist eine andere Sache ...).

Unsere App ist bei relativ geringer Belastung zum Stillstand gekommen (CLOSE_WAIT-Verbindungen zwischen Apache und Tomcat werden aufgebaut) und wir führen gerade einen Belastungstest durch, um das Problem zu beheben. Deadlocks, die in unserer SQLServer-Instanz auftraten, traten recht häufig auf, und so haben wir beschlossen, dort anzufangen. Um das Problem zu reproduzieren und anschließend unsere Korrekturen zu testen, verwenden wir eine einzelne Maschine, um mithilfe von Gatling Belastung zu erzeugen.

Zu Beginn konnten wir die Deadlocks mithilfe des Tools zuverlässig replizieren. Nachdem wir einige Optimierungen vorgenommen hatten, verschwanden die Deadlocks und auch die CLOSE_WAIT-Verbindungen. Anschließend haben wir die Anwendung auf eine Auslastung gebracht, mit der wir sehr zufrieden waren, und sie lief ohne größere Probleme.

Leider haben wir nach der Anwendung der Korrekturen auf das Produktionssystem immer noch das gleiche ursprüngliche Verhalten festgestellt. Das bringt mich zu der Frage, ob die vom Stress-Tool erzeugte Belastung nicht eine gute Darstellung dessen ist, was in der realen Welt tatsächlich vor sich geht.weil es aus einer einzigen Quelle stammt und nicht aus vielen verschiedenen Clients, die über das Internet verteilt sind.

Antwort1

Ein einzelner Lastgenerator kann das Verbindungspooling wahrscheinlich besser bewältigen als unterschiedliche Clients. So können beispielsweise Keepalives besser genutzt werden. Dies führt zu mehr Anfragen über weniger Verbindungen.

Wenn Round-Robin-DNS verwendet wird, wird es eher nur eines der DNS-Ziele ansprechen, als die Last auf alle zu verteilen. Einige Load Balancer treffen Entscheidungen zur Stickyness auf Grundlage der Client-IP, die in diesem Fall statisch wäre.

Ihr Lastgenerator verfügt möglicherweise über einen eingeschränkten Ausführungspool (sagen wir, 200 „Benutzer“), sodass die Benutzer aufgrund von Reaktionsverzögerungen langsamer arbeiten. In der realen Welt hingegen gibt es eine viel größere Anzahl von Benutzern, die nicht geduldig darauf warten, dass andere Benutzer fertig werden.

Antwort2

Es ist schwer, etwas zu sagen, ohne Ihr Gatling-Testszenario zu sehen. Nur ein "Blindschuss": Ihr Gatling-Test stellt den realen Benutzer nicht genau dar, d. h.

  • Echte Browser laden externe Ressourcen herunter, die in die Seite eingebettet sind, z. B. Bilder, Skripte und Stile, und verwenden dazu einen parallelen Threadpool. Wenn Ihr Gatling-Test fehltHTML-Ressourcen ableitenMethoden könnte es sein, dass die Belastung durch Gatling viel geringer ist als die durch echte Benutzer, die hinter den echten Browsern sitzen
  • DNS-Caching. Gatling kann nur eine IP-Adresse treffen, da IP-Adressen hinter den DNS-Namen auf JVM-Ebene zwischengespeichert werden.Häufig gestellte Fragen zu Gatling:

    Grundsätzlich muss der DNS-Cache von Gatling/JVM optimiert werden. Eine Lösung besteht darin, ihn -Dsun.net.inetaddr.ttl=0der Befehlszeile hinzuzufügen.

  • AJAX-Anfragen. Gatling führt kein clientseitiges JavaScript aus. Wenn Ihre Anwendung also auf XMLHTTP-Anfragen basiert, werden diese nicht ausgelöst, wenn Gatling die Seite aufruft. Sie müssen sie manuell verarbeiten, falls Ihre Anwendung eine Form von AJAX verwendet.

Ich empfehle daher,So lässt sich JMeter mehr wie ein echter Browser verhaltenund implementieren Sie ein gleichwertiges Gatling-Setup, denn wenn der Belastungstest nicht die tatsächliche Belastung darstellt, ergibt es nicht viel Sinn, einen solchen Test durchzuführen.

verwandte Informationen