2014-11-03 3 views
6

Ich bin die Leistung von Tomcat 7 tuning, der Server ist mit 24 Kernen und 32 GB Speicher ausgestattet, meine Testschnittstelle ist ein RESTful Service ohne Prozess (Antwort sofort) und die Konfiguration von server.xml ist wie folgende ...Tomcat Performance Tuning

<Connector port="8088" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      redirectPort="8443" 
      enableLookups="false" 
      compression="off" 
      maxConnections="8192" 
      maxThreads="1000" 
      tcpNoDelay="true"/> 

und die JVM Konfiguration ...

-Xms8192M -Xmx16384M. 

der Host von JMeter ist, hat ein anderer Computer mit derselben Spezifikation über Server. Und die Konfiguration von JMeter Heap ist -Xms12218m -Xmx24426m.

Mein JMeter-Testplan ist 240 Anfragen gleichzeitig an die RESTful-Schnittstelle senden, aber ich habe festgestellt, dass der Durchschnitt der Antwortzeit für die ersten 100 nicht mehr als 50 ms ist, aber es erhöht sich auf 1 Sekunde in den nächsten 100 und bis 3 Sek. für den Rest.

Ich bin neugierig auf ein solches Phänomen, gibt es irgendwelche Fehler in den Konfigurationen oder irgendwelche Vorschläge?

Vielen Dank im Voraus.

+0

Ich denke nicht, einen Prozess mit 16-24 Gigabyte Ram einrichten ist eine gute Idee. Warum nicht Clustering der App, Anfragen an viele Server senden? – Stefan

+0

Vielen Dank für Ihre Antwort, und ich muss das Extrem eines einzelnen Knotens kennen, so dass wir die geringste Anzahl von Servern haben können, um die Anforderung zu erfüllen. –

Antwort

6

können Sie config:

acceptCount="2048" 

und

maxConnections="1024" 

Die maxConnections hat Beziehung mit maxThreads, und Sie sollten die maxThreads entsprechen Ihr Unternehmen und CPU Kern-Anzahl, wie 8X oder 16X konfigurieren . acceptCount ist die Nummer der wartenden Verbindung.

Beachten Sie, dass die maxConnections und maxThreads nicht um so größer ist, je besser, mit der Leistung Ihrer Serverhardware.

+1

Willkommen bei StackOverflow, und vielen Dank für Ihren Beitrag. Ihre Antwort würde wesentlich verbessert, wenn Sie nur ein paar Worte hinzufügen, die Ihren Vorschlag erklären.Obwohl es für Sie offensichtlich ist, ist es möglicherweise für den Fragesteller nicht offensichtlich, oder für andere, die bei dem gleichen Problem Hilfe suchen. – GreenAsJade

0

Je mehr Anforderungen Ihr Server erfüllen muss, desto länger dauert die Bearbeitung der einzelnen Anforderungen. Das ist normales Verhalten.

Wie starten Sie Ihre Threads gleichzeitig? Rampenzeit = 0 oder 1?

Wenn Sie eine große Anzahl von Threads starten, benötigt Ihr Client mehr Zeit, um Anfragen zu stellen, und Ihr Server braucht länger, um zu antworten.

Beim Start kann der Server schnell auf alle Anfragen reagieren, da er sonst nichts zu tun hat, bis ein Schwellenwert erreicht ist. Jede dieser Anfragen wird schnell beendet und derselbe Thread sendet eine weitere Anfrage. Währenddessen reagiert der Server auf die vorherige Thread-Welle, während weitere in die Warteschlange eingereiht werden. Jetzt müssen Warteschlangen verwaltet werden, während weiterhin auf Anforderungen reagiert wird, sodass ein weiterer Schwellenwert erreicht wird.

Das gleichzeitige Starten mehrerer Threads und Erledigungsanforderungen ist im Allgemeinen kein sehr realistischer Anwendungsfall für einen Server, außer in einigen wenigen Fällen. Wenn es relevant ist, können Sie dieses Verhalten erwarten.

+0

Unser Fall ist ein Identitäts- und Autorisierungsservice für Geräte, und es wird mehr als zehntausend von ihnen geben. Und unser Ziel ist die Antwortzeit könnte als 1 Sekunde leasen. Und vielen Dank für Ihre Antwort. –