2017-08-21 1 views
0

implementiert werden Ich habe eine REST-API mit Spring Framework entwickelt. Wenn ich dies in Tomcat 8 unter RHEL implementiere, sind die Antwortzeiten für POST- und PUT-Anfragen im Vergleich zur Bereitstellung auf meinem lokalen Rechner (Windows 8.1) sehr hoch. Auf dem RHEL-Server dauert es 7-9 Sekunden, auf dem lokalen Rechner sind es weniger als 200 Millisekunden.Tomcat 8 - POST- und PUT-Anfragen werden langsamer, wenn sie auf RHEL

RAM und CPU des RHEL-Servers sind 4-mal so hoch wie die der lokalen Maschine. Standard-Tomcat-Konfigurationen werden sowohl in Windows als auch in RHEL verwendet. Die Netzwerklatenz ist ausgeschlossen, da GET-Anforderungen mehr oder weniger zeitgleich mit der lokalen Maschine sind, während die Zeit bis zum ersten Byte eher für POST- und PUT-Anforderungen benötigt wird.

Ich habe sogar versucht, die Remote-JVM mit Visual JVM zu profilieren. In meinem benutzerdefinierten Code sind keine wichtigen Hotspots enthalten.

enter image description here

konnte ich das gleiche Problem in anderen RHEL-Server reproduzieren. Gibt es eine Tomcat-Einstellung, die bei der Behebung dieses Leistungsproblems helfen könnte?

Antwort

0

Das Profilprotokoll, das Sie platziert haben, bedeutet nichts, mehr oder weniger. Es zeigt folgendes an:

Die blockierende Warteschlange blockiert. Was normal ist, denn das ist sein Zweck - zu blockieren. Das bedeutet, dass man nichts davon nehmen kann.

Es wartet auf die Verbindung an der Steckdose. Was auch normal ist.

Sie geben nicht an, was Ihr physisches/Hardware-Setup von RHEL 8 ist. Das Betriebssystem hier ist vielleicht nicht die einzige Sache. Sie können die Netzwerklatenz nicht beseitigen. Was ist, wenn Sie SAN haben, kann das SAN Latenz selbst haben. Wenn Sie ein SSD-Laufwerk verwenden und RHEL ein SAN mit Replikation verwendet, kann es dort zu einer Netzwerkspaltung kommen.

Ich bin eher geneigt, zuerst die IO auf der Festplatte zu überprüfen, als auf das Betriebssystem zu konzentrieren. Wenn der Server freigegeben ist, befinden sich möglicherweise andere Prozesse auf dem Datenträger.

Sie sagen, dass die Latenz ausgeschlossen ist, weil die GET-Anfragen die gleiche Zeit benötigen. Dies ist nicht genug, um es zu übersteuern, da ich sagte, dies ist die Latenz zwischen dem Client und dem Anwendungsserver, es überprüft nicht die Latenz zwischen Ihrem App Server Machin und Ihrem SAN oder Festplatte oder was auch immer Speicher dort ist.