Tomcat zeigt ohne ersichtlichen Grund eine furchtbare Leistung

Tomcat zeigt ohne ersichtlichen Grund eine furchtbare Leistung

Wir führen eine Spielanwendung .WAR auf Tomcat 6 auf einem Amazon EC2-Server mit 8-Core-Prozessor und 7 GB RAM aus. Die Anwendung verwendet eine MySQL-Datenbank, die auf Amazon RDS gehostet wird.

Der Zugriff auf diese Facebook-Anwendung dauert ewig, wenn nur 20 bis 30 Benutzer sie spielen. Bei 1 bis 2 Benutzern ist der Unterschied groß. Die gesamte WAR-Datei ist ca. 4 MB groß, alle statischen Inhalte werden woanders gehostet.

Der Server war nie kurz davor, seinen RAM zu verlieren. Die CPU-Auslastung war nie höher als 13,5-14 %. Selbst bei ~500 Benutzern kam alles völlig zum Stillstand. Die Thread-Anzahl oder die Threadpools sind noch lange nicht ausgeschöpft. Ich habe Maxthreads erhöht, aber es hat keinen merklichen Unterschied gemacht.

Meine Theorie ist, dass Tomcat nur einen Prozessorkern verwenden kann, was erklären würde, warum es bis zum Stillstand verlangsamt wurde, obwohl die CPU-Auslastung während der Aktivitätsspitze stabil bei 13-14 % lag.
Aber ich verstehe nicht, warum nur ein CPU-Kern verwendet wird. In server.xml gibt es keine Prozessorbegrenzung. Die App enthält mehrere Servlets (4 oder 5). Im Java-Code wird SingleThreadModel nicht erwähnt.

WAS könnte der Grund dafür sein, dass die Anwendung extrem langsam läuft? Wenn nur 1-5 Personen an der Anwendung arbeiten, läuft sie einwandfrei. Bei 20-30 Personen ist sie kaum erreichbar.

Antwort1

Dies kann ein Fehler im Anwendungsdesign sein. Wir haben auch eine Anwendung, die dasselbe Verhalten zeigt. Ein erheblicher Teil ihres Codes ist synchronisiert, sodass sie unabhängig davon, wie viele CPUs wir ihr zuweisen, effektiv in einem einzigen Thread ausgeführt wird. In dieser Situation können Sie praktisch nichts anderes tun, als mehrere Instanzen derselben Anwendung auszuführen und die Last zwischen ihnen auszugleichen.

verwandte Informationen