Frage

Wir verwenden JMeter, um unsere PHP -Anwendung auf dem Apache 2 -Webserver zu testen. Ich kann JMeter so laden, dass 25 oder 50 Threads verwendet werden, und die Last auf dem Server erhöht sich nicht, die Antwortzeit des Servers. Je mehr fädelt, desto langsamer die Reaktionszeit. Es scheint, als ob JMeter oder Apache die Anforderungen anstellen. Ich habe den Wert von Maxclients in der Apache -Webserver -Konfigurationsdatei geändert, dies ändert jedoch nicht das Problem. Während JMeter ausgeführt wird, kann ich die Anwendung verwenden und respektable Antwortzeiten erhalten. Was gibt? Ich würde erwarten, meinen Server durch Erhöhen der Anzahl der Threads meinen Server auf 0% im Leerlauf zu steuern. Kann mir jemand helfen, mir in die richtige Richtung zu zeigen?

UPDATE: Ich habe festgestellt, dass ich, wenn ich Sitzungen aus meiner Anwendung entferte, eine Volllast auf dem Server simulieren kann. Ich habe versucht, Sitzungen wieder zu erlangen und für jeden Thread einen HTTP-Cookie-Manager zu verwenden, aber es scheint keine Wirkung zu erzielen.

War es hilfreich?

Lösung

Sie müssen feststellen, wo der Engpass auftritt, und dann versuchen, das Problem zu beheben.

  • Der JMeter -Client sollte auf einer gut ausgestatteten Maschine ausgeführt werden. Ich bevorzuge einen Solaris/UNIX -Server, der das JVM ausführt, aber für <200 Threads ist ein moderner Windows -Computer gut. JMeter kann ein Engpass werden, und Sie werden nach dem Tun nicht sinnvolle Ergebnisse erzielen. Darüber hinaus sollte es auf einer separaten Maschine für Ihre Tests ausgeführt und im selben Netzwerk vorzuziehen. Die WAN -Latenz kann zu einem Problem werden, wenn Ihr Test -Rig und Ihr Server weit voneinander entfernt sind.
  • Das zweite, was Sie überprüfen sollten, sind Ihre Apache -Arbeiter. Apache hat ein Modul - mod_status -, das Ihnen den Status eines jeden Arbeitnehmers zeigt. Es ist möglich, dass Ihre Poolgröße zu niedrig eingestellt ist. Aus dem mod_status können Sie sehen, wie viele Mitarbeiter verwendet werden. Für nur wenige und Apache gibt es keine Arbeitnehmer, um Anfragen zu bearbeiten, und die Anfragen werden sich starten. Zu viele, und Apache kann den Speicher auf dem Box erschöpfen, auf dem es läuft.
  • Als nächstes sollten Sie Ihre Datenbank überprüfen. Wenn es sich auf einer separaten Maschine befindet, kann die Datenbank einen IO- oder CPU -Mangel haben.
  • Wenn Sie einen Engpass und der Server und die DB auf derselben Maschine haben, drücken Sie im Allgemeinen eine CPU-, RAM- oder IO -Grenze. Ich habe diese in der Reihenfolge aufgelistet, in der sie am einfachsten zu identifizieren sind. Wenn Sie eine CPU -App -App erhalten, können Sie leicht sehen, dass die CPU -Verwendung zu 100%geht. Wenn Ihnen der RAM ausgeht, beginnt Ihr Maschine zu tauschen. Sowohl bei Windows als auch bei Unix ist es ziemlich einfach, Ihren verfügbaren kostenlosen RAM zu sehen. Zuletzt können Sie IO gebunden sein. Auch dies kann mit verschiedenen Tools oder Statistiken überwacht werden, ist jedoch nicht so offensichtlich wie die CPU.

Zuletzt, insbesondere zu Ihrer Frage, ist es möglich, dass eine große Anzahl von Sitzungsdateien in einem einzigen Verzeichnis gespeichert wird. Oft speichert PHP Sitzungsinformationen in Dateien. Wenn dieses Verzeichnis groß wird, dauert es zunehmend lange Zeit, bis PHP die Sitzung findet. Wenn Sie Ihren Test ausgeschaltet haben, hat die PHP -App möglicherweise Tausende von Sitzungsdateien für jede Benutzeranforderung erstellt. Auf einem Windows -Server verlangsamt es schneller als auf einem UNIX -Server, um Unterschiede in der Art und Weise zu tun, wie Verzeichnisse auf den beiden Betriebssystemen gespeichert werden.

Andere Tipps

Verwenden Sie einen konstanten Durchsatz -Timer? Wenn JMeter den Durchsatz nicht mit den ihm zugewiesenen Threads bedienen kann, werden Sie diese Warteschlange und Blowouts in der Antwortzeit sehen. Um herauszufinden, ob dies das Problem ist, fügen Sie mehr Threads hinzu.

Ich habe auch einen Bericht darüber gefunden, wenn es im Skript JavaScript -Anrufe gibt. Versuchen Sie in diesem Fall, JavaScript-Aufrufe auf das Testplanelement oben im Skript zu verschieben oder nach Möglichkeiten zu suchen, um den Wert vorzubereiten.

Überprüfen Sie eine statische Datei, die von Apache und nicht nach PHP serviert wird, um festzustellen, ob sich das Problem in der Apache -Konfiguration oder in der PHP -Konfiguration befindet.

Überprüfen Sie auch Ihre Netzwerkverbindungen und Ihre Konfiguration. Unsere JMeter -Tests ging gut voran, bis sie eine Wand traf. Schließlich wurde klar, dass wir nur eine 100 -MB -Verbindung hatten und sie gesättigt war, und gigabit wurde behoben. Ihre Netzwerkkarten oder Ihre Switch werden möglicherweise mit einer geringeren Geschwindigkeit ausgeführt, als Sie denken, insbesondere wenn die Geschwindigkeitseinstellung "automatisch" ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top