Die Anwendung wird (MANCHMAL) zu Spitzenzeiten langsamer, wenn sie auf Tomcat mit einem Reverse-Proxy vom Apache-Server ausgeführt wird und auf AWS bereitgestellt wird

Die Anwendung wird (MANCHMAL) zu Spitzenzeiten langsamer, wenn sie auf Tomcat mit einem Reverse-Proxy vom Apache-Server ausgeführt wird und auf AWS bereitgestellt wird

Nur als Vorwort: Ich bin Softwareentwickler und zunächst wusste niemand, was los war. Daher habe ich einige Tests durchgeführt und mich eingelesen und würde meinen Kollegen gerne dabei helfen, dieses Problem zu beheben.

Das Thema:

Das Problem besteht darin, dass der Server zu Spitzenzeiten so langsam wird, dass die Verbindung in Browsern wie Chrome abläuft (nach 30 Sekunden), der Server aber immer noch aktiv ist und nach ca. 100 Sekunden Seiten bereitstellen kann (getestet mit Insomnia). Ich habe das Problem abs ...auf dem Produktionsserver reproduziert und es hat etwas mit der Anzahl gleichzeitiger Anfragen zu tun, was wahrscheinlich durch unsere Konfiguration des Apache-Servers verursacht wird.

Mehr Info:

Bei der Entwicklung führen wir Tomcat8 lokal aus. Ich habe es mit " abs -c 200 -n 2000 https:/[link]" getestet und die Ausführungszeiten sind in Ordnung. Aber beim Testen des Produktionsservers war die Verlangsamung der von mir getesteten API sogar bei 50 gleichzeitigen Anfragen erheblich: von 800 ms Standardzeit auf 27846 ms.

Ausprobierte Dinge und weitere Details:

Wir haben Java Melody am Laufen und ich dachte, dass wir vielleicht das Thread-Limit für den Tomcat-Ausführungsthread erreichen, also haben wir die Anzahl der Threads von den standardmäßigen 200 auf 500 erhöht (das war, bevor ich den Test durchgeführt habe). Wenn ich den oben genannten Test ausführe, kann ich sehen, dass die Anzahl der aktiven Threads auf 50 von 500 ansteigt (läuft in der Produktion, also verwenden einige Leute das Programm tatsächlich auch), aber nein, es wird trotzdem sehr langsam.

Zu Spitzenzeiten sehe ich, dass wir etwa 1000 HTTP-Sitzungen haben, aber die Threads, der Speicher und die CPU sind nicht annähernd bei 100 %. Nur um sicherzugehen, haben wir den Server auf das bestmögliche Upgrade aufgerüstet, aber das war es natürlich nicht. Wir verwenden SQL, aber der SQL-Server erreicht auch keine Spitzenlast, also bezweifle ich, dass das das Problem ist.

Ich weiß, dass ich JVM-Argumente nicht nachahmen sollte, aber bei ähnlichen Problemen habe ich versucht, „-XX:ReservedCodeCacheSize=512M“ hinzuzufügen, aber das hat auch nicht funktioniert. Ich habe auch versucht, acceptCount in server.xml auf 1000 zu erhöhen, aber es funktioniert immer noch nicht.Soll ich diese Änderungen rückgängig machen?Ich habe keine Leistungsänderung bemerkt und soweit ich aus der Dokumentation entnehmen kann, ist es in Ordnung, es so zu belassen.

Wir haben eine seltsame Funktion, bei der die Webanwendung nach einer gewissen Zeit der Inaktivität zur Startseite geht und dann die Startseite alle xx Minuten aktualisiert. Ich denke, das ist schlecht für die Leistung, insbesondere wenn ein Benutzer viele Tabs geöffnet hat und diese zu aktualisieren beginnen. Das ist wahrscheinlich nicht die Ursache unserer Probleme, aber es ist erwähnenswert.

Als nächstes werde ich heute versuchen, die Apache-Server-Argumente zu manipulieren. Ich lese gerade eineTuning-Anleitungund MaxRequestWorkers / MaxClients sieht aus wie etwas, das erklären könnte, was wir erleben. ZitatWenn diese Anweisung zu niedrig ist, nutzt Apache die verfügbare Hardware nicht ausreichend, was zu Geldverschwendung und langen Verzögerungen bei den Seitenladezeiten während der Spitzenzeiten führt.

Ich bin für jeden Tipp dankbar. Hoffentlich liegt es nur am Apache-Server und ich kann den Server heute zumindest nutzbar machen. Gibt es noch andere Konfigurationen, die diese Verlangsamung verursachen könnten?

Antwort1

Ihr Webserver könnte durch zu viele Anfragen überlastet sein, was in der Tat den SlowLoris-DOS-Angriff emuliert. Bitte überprüfen Sie meinevorherige Antwortzum Thema.

verwandte Informationen