Wir haben einen neuen Client, und derzeit führen wir einen Stresstest auf der Produktion durch wie einen Server mit 100 gleichzeitigen http-Threads (unter Verwendung von Jmeter). Das Problem ist, obwohl wir 2 Xeon Prozessor haben (jede CPU mit 4 Kern, insgesamt bis 8 Kern), kann ich Tomcat sehen, der 4 Kerne, nicht 8 Kerne verwendet. die 4 Kerne ich glaube es gehört nur 1 Prozessor. die anderen 4 Threads schlafen praktisch.
Ich habe vom Apache-Dokument den Eindruck bekommen, dass wir, wenn wir einen Multi-CPU-Rechner haben, acceptorThreadCount="2" konfigurieren sollten: Ссылка
Wir haben den Standard-Connector auf tomcatThreadPool mit maxThreads="150" minSpareThreads="4" und den Connector Execter auf acceptorThreadCount="2" gesetzt. Aber es nutzt nur noch 1 CPU.
Haben Sie eine Idee, wie Sie alle Kerne (oder alle Prozessoren der CPU) nutzen können?
Ein paar zufällige Gedanken, um Ihnen zu helfen.
Die JVM führt ihre eigene Aufgabenplanung intern durch. Es gibt Zeiten, wenn die JVM nicht denkt, dass eine CPU überbeansprucht wird, kann sie einige Kerne für kritische Operationen reservieren. Daher sehen Sie einige Kerne verwendet werden und andere im Leerlauf sitzen.
Eine andere Möglichkeit ist, dass die CPU-Affinität explizit festgelegt werden muss. Unter Unix können Sie überprüfen, für welche CPUs die JVM mit dem Taskset-Befehl ::
ausgewählt wurde %Vor%Rufen Sie in Windows den Task-Manager auf, wechseln Sie zur Registerkarte "Prozesse", klicken Sie mit der rechten Maustaste auf einen Prozess und wählen Sie "Affinität festlegen". Sie können sehen, welche CPU / Cores verwendet werden.
Ich kenne keinen Start-up-Parameter in Java / Tomcat, um die CPU-Auslastung zu steuern. Ich glaube, das sollte auf Betriebssystemebene sein. Ich erinnere mich auch nicht daran, jemals gelesen zu haben, dass die JVM codiert ist, um die Anzahl der verwendeten CPU / Kerne zu begrenzen.
Kommentar von @JoseK löst den ganzen Flaschenhals aus. Unsere Anwendung schreibt zu viele Protokolle. In einer Instanz haben wir versucht, die Anzahl der Logs in unserer Log-Datei zu reduzieren, wir stellen fest, dass die Gesamtperformance besser ist und die CPU-Auslastung höher ist.
Wir versuchen dann mit log4k log level auf "WARN" und wow! Die Anwendung nutzt 70% aller CPU-Kerne.
Wir sollten die Festplattennutzung überprüfen, bevor wir die Frage stellen. Danke!
Tags und Links tomcat