2010-07-05 7 views
6

Ich habe Apache + Tomcat Setup mit mod_jk auf 2 Servern. Jeder Server hat sein eigenes Apache + Tomcat-Paar und jede Anforderung wird von Tomcat Load Balancing Worker auf 2 Servern bedient.Apache + Tomcat mit mod_jk: MaxThread Einstellung beim Load Balancing

Ich habe eine Frage darüber, wie Apache maxClient und Tomcat maxThread eingestellt werden sollten.

Die Standardnummern sind, Apache: maxClient=150, Tomcat: maxThread=200

In dieser Konfiguration, wenn wir nur 1 Server-Setup haben, wäre es gut funktionieren wie Tomcat Arbeiter erhalten nie die eingehenden Verbindungen mehr als auf einmal 150. Wenn es jedoch einen Lastausgleich zwischen zwei Servern gibt, ist es dann möglich, dass der Tomcat-Worker 150 + (eine Nummer von einem anderen Server) erhält und den maxThread als SEVERE: All threads (200) are currently busy überläuft?

Wenn ja, sollte ich Tomcat maxThread=300 in diesem Fall einstellen?

Dank

+0

In Ihrem 2-Server-Setup, wie wird der Lastenausgleich über die beiden Apaches durchgeführt? – JoseK

+0

Es ist von einem Router erledigt. Aber es filtert nicht nach Verkehrsaufkommen. So kann jeder Apache 150 Anfragen (und mehr) gleichzeitig erhalten. – c4il

Antwort

7

maxThreads bis 300 Einstellung sollte in Ordnung sein - es gibt keine festen Regeln gibt. Es hängt davon ab, ob Sie sehen, dass Verbindungen abgelehnt werden.

Zu viel erhöht verursacht hohen Speicherverbrauch, aber Produktion Tomcats sind bekannt, mit 750 Threads zu laufen. Siehe auch hier. http://java-monitor.com/forum/showthread.php?t=235

Haben Sie tatsächlich den SEVERE Fehler? Ich habe auf unserem Tomcat 6.0.20 getestet und es wirft eine INFO-Nachricht, wenn die maxThreads überschritten wird.

INFO: Maximum number of threads (200) created for connector with address null and port 8080 

Es verweigert Verbindungen nicht, bis der acceptCount Wert überschritten wird. Die Standardeinstellung ist 100.

Aus den Tomcat docs http://tomcat.apache.org/tomcat-5.5-doc/config/http.html

die maximale Warteschlangenlänge für eingehende Verbindungsanforderungen, wenn alle möglichen Anforderungsverarbeitungsthreads in Gebrauch sind. Alle Anfragen, die empfangen werden, wenn die Warteschlange voll ist, wird abgelehnt. Der Standardwert ist 100.

so funktioniert es

1) Da die Anzahl der gleichzeitigen Anforderungen Anstieg ist, werden Fäden an die konfigurierte maximale erstellt werden (der Wert der maxThreads Attribut).

In diesem Fall erscheint an dieser Stelle die Meldung "Maximale Anzahl der erstellten Threads (200)". Anfragen werden jedoch weiterhin für den Dienst in die Warteschlange gestellt.

2) Wenn noch mehr gleichzeitige Anfragen empfangen werden, werden sie bis zum konfigurierten Maximum in die Warteschlange eingereiht (der Wert des Attributs acceptCount).

Somit können insgesamt 300 Anfragen ohne Fehler akzeptiert werden. (vorausgesetzt, Ihr acceptCount ist standardmäßig auf 100 gesetzt) ​​

3) Wenn Sie diese Zahl überschreiten, wird Verbindung abgelehnt, bis Ressourcen für die Verarbeitung verfügbar sind.

Sie sollten also in Ordnung sein, bis Sie Schritt 3

+0

Sehr schöner Punkt über acceptCount! Dies sollte perfekt funktionieren. Entschuldigung, ich hätte in meiner Frage klarer sein sollen, aber es war meine allgemeine Was-wäre-wenn-Frage. Ich hatte ursprünglich maxThread = 150 und bekam SEVERE Fehler. Also habe ich es wieder auf die Standard 200 geändert, aber dann wurde mir klar, dass 200 nicht genug sein würde, aus dem Grund, den ich in der Frage beschrieben habe. Vielen Dank für die Antwort. Es macht jetzt alles Sinn. – c4il