Apache Tomcat mit Standardeinstellungen kann Dutzende gleichzeitiger Benutzer bewältigen. Für Hunderte und Tausende brauchen Sie Tuning. Hier sind unsere Erfahrungen mit Tomcat 7 unter hoher Last.
Connector — NIO vs. BIO¶
Der Standard-BIO-Connector (Blocking I/O) allokiert einen Thread pro Verbindung. Bei 200 gleichzeitigen Verbindungen = 200 Threads. Der NIO-Connector (Non-Blocking I/O) bewältigt Tausende von Verbindungen mit Dutzenden von Threads. Für Produktionsserver immer NIO verwenden: protocol=org.apache.coyote.http11.Http11NioProtocol.
Thread Pool¶
maxThreads: maximale Anzahl von Threads für die Verarbeitung von Requests. Für NIO: 150–300 je nach Last. acceptCount: Warteschlange der Requests, die auf einen Thread warten — wenn voll, gibt der Server 503 zurück. minSpareThreads: minimale Anzahl vorgewärmter Threads.
Keep-Alive¶
HTTP Keep-Alive hält die Verbindung für mehrere Requests offen. Reduziert den TCP-Handshake-Overhead. maxKeepAliveRequests=100, keepAliveTimeout=15000 ms. In einer lastverteilten Umgebung kann aggressives Keep-Alive kontraproduktiv sein.
Komprimierung¶
compression=on, compressionMinSize=2048, compressibleMimeType für text/html, text/css, application/javascript. Spart Bandbreite auf Kosten der CPU. Für statische Dateien ist es besser, sie vorab auf der Festplatte zu komprimieren.
Access Log¶
Aktivieren Sie das Access Log mit dem Response-Time-Pattern (%D). Die Analyse des Access Logs deckt langsame Requests auf, die JMX-Metriken nicht erfassen.
Zusammenfassung¶
NIO-Connector, korrekt konfigurierter Thread Pool, Keep-Alive und Komprimierung. Messen Sie vor und nach jeder Änderung — Tuning ohne Benchmarks ist nur Raten.
Brauchen Sie Hilfe bei der Implementierung?
Unsere Experten helfen Ihnen bei Design, Implementierung und Betrieb. Von der Architektur bis zur Produktion.
Kontaktieren Sie uns