Wenn Tomcat aus irgendeinem Grund Ihre Ajax-Anfragen nicht schnell bearbeitet, reduziert dies die Anzahl der Anfragen, die Ihr Apache verarbeiten kann. Tomcat ist so konfiguriert, dass 400 Anforderungen parallel verarbeitet werden, und es gibt auch eine Standardeinstellung acceptCount
von 100. Ihr Tomcat kann also 500 Anforderungen verarbeiten - zumindest: JVM- und plattformabhängig können noch mehr Verbindungsanforderungen in die Warteschlange gestellt werden.
worker.worker1.reply_timeout=120000
worker.worker1.socket_timeout=150000
.. sagt mod_jk, dass es ungefähr 1,7 Tage (socket_timeout in Sekunden) auf Socket-Operationen und 2 Minuten auf einzelne Netzwerkpakete von Tomcat warten soll . Sie sollten diese Werte anpassen, damit mod_jk so früh wie möglich einen Fehler zurückgibt, wenn tomcat langsam ist.
Nehmen wir an, Ihre Ajax-Anforderungen werden normalerweise innerhalb einer Sekunde mit Ausreißern von bis zu zwei Sekunden verarbeitet. Nach der Bearbeitung wird die Antwort sofort zurückgesendet. Dann darf man worker.worker1.reply_timeout=2500
nur noch eine halbe Sekunde setzen. socket_timeout
kann sogar weggelassen werden, da es sich nur um einen groben Wert handelt. socket_connect_timeout
, das definiert, wie lange es dauern kann, bis eine Verbindung von apache / mod_jk zu tomcat hergestellt ist, sollte zu worker.properties hinzugefügt und auf einen sehr niedrigen Wert gesetzt werden, z. B. 100. da beide auf demselben Server sitzen. Weitere Informationen finden Sie unter Die Apache Tomcat Connector-Referenz .
Jede Anfrage, die von Apache an Tomcat geht, zählt für das, was Sie MaxClients
in httpd.conf konfiguriert haben. Je mehr Anfragen in Tomcat stecken bleiben, desto weniger kann von Apache für statischen Inhalt verarbeitet werden. Wenn Sie Tomcat in dieser Situation herunterfahren, wird statischer Inhalt schnell wieder bereitgestellt, da Ressourcen für die Anforderungsverarbeitung in mod_jk und apache frei werden.
Sie haben prefork.c
und worker.c
in httpd.conf gleichzeitig konfiguriert . Ich denke, prefork.c
ist der aktive, wie MaxClients
auf 512 eingestellt und dies würde Ihren Beobachtungen und meiner Interpretation entsprechen .. ;-)
Es kann sehr hilfreich sein, mod_jk zu sagen, dass er lange laufende Anfragen an Tomcat früher aufgeben soll. Sie sollten jedoch auch darüber nachdenken, die Anzahl der von apache ( MaxClients
) verarbeiteten Client-Anfragen und die Anzahl der <connector maxThreads=...
parallel von Tomcat verarbeiteten Anfragen ( ) anzupassen . Diese Zahlen müssen auf das abgestimmt werden, was während des normalen Betriebs passiert. Eine gewisse Verfolgung der Seitenladevorgänge kann hilfreich sein, um festzustellen, in welchem Verhältnis diese Werte sein sollten. Der absolute Wert hängt von Ihren Serverspezifikationen, der Netzwerksituation, der Anzahl der Clients usw. ab.
Wenn die absolute Anzahl möglicher paralleler Anforderungen zu niedrig ist, beschweren sich Benutzer über langsame Seitenladevorgänge, während Ihr Server nicht an die Kapazität gewöhnt ist. Wenn es viel zu hoch ist, verbraucht es mehr Speicher als wirklich benötigt, verlangsamt sich sogar und erholt sich nicht schnell von Problemen mit Subsystemen - z. B. der Datenbank. Wenn Apache weitaus mehr Anfragen an Tomcat sendet, als es rechtzeitig verarbeiten würde, werden einige von ihnen eine Zeitüberschreitung feststellen, während andere in akzeptabler Zeit verarbeitet werden. Es ist keine schlechte Idee, mit ähnlichen Werten bei Apache und Tomcat zu beginnen, solange die Timeout-Einstellungen sicherstellen, dass ein langsamer oder nicht reagierender Tomcat kein Mühlstein am Hals von Apache ist.