GENTICS News
Bei meinem Portalserver enden manche Requests mit einem 503 im catalina.out findet sich aber kein Fehler.
Es kann sein das hier unter Umständen eine falsche konfiguration von mod_jk schuld ist und zuwenige Connections erlaubt werden.
Im apache MPM model "worker" erzeugt der apache webserver ein oder mehrere
worker prozesse (bis zu config 'ServerLimit') welche jeweils ein oder
mehrere threads erstellen (bis zu 'ThreadsPerChild'). Jeder Thread
behandelt zu einem zeitpunkt maximal einen http request, damit gibt es pro
worker prozess bis zu so viele connections zu den tomcats wie es threads
gibt.
Die verbindungen, die mod_jk zu den tomcats hat, werden nicht bei bedarf
auf- und abgebaut sondern kommen aus einem verbindungspool mit statischer
groesse. Jeder apache prozess hat einen eigenen solchen pool pro tomcat
worker. Die Groesse dieser pools wird im worker.properties file mit der
variable 'cachesize' eingestellt. Ist diese cache size kleiner als die
anzahl der apache threads pro prozess, besteht die moeglichkeit, dass der
apache mehr gleichzeitige verbindungen zu den tomcats aufbauen moechte
als es slots in diesen pools gibt, was in einem HTTP 503 error endet.
Loesung: ThreadsPerChild niedriger oder worker.*.cachesize hoeher
einstellen so das ThreadsPerChild <= worker.*.cachesize ist.
Ad JK Loadbalancer: Dieser achtet nicht auf die cachesizes. D.h. wenn der
mod_jk loadbalancer verwendet wird muss jede einzelne worker cachesize
entsprechend dimensioniert sein, nicht einfach nur ihre summe.
In neueren mod_jk versionen hat die 'cachesize' variable den sprechenderen
namen 'connection_pool_size'.
Im apache MPM model "worker" erzeugt der apache webserver ein oder mehrere
worker prozesse (bis zu config 'ServerLimit') welche jeweils ein oder
mehrere threads erstellen (bis zu 'ThreadsPerChild'). Jeder Thread
behandelt zu einem zeitpunkt maximal einen http request, damit gibt es pro
worker prozess bis zu so viele connections zu den tomcats wie es threads
gibt.
Die verbindungen, die mod_jk zu den tomcats hat, werden nicht bei bedarf
auf- und abgebaut sondern kommen aus einem verbindungspool mit statischer
groesse. Jeder apache prozess hat einen eigenen solchen pool pro tomcat
worker. Die Groesse dieser pools wird im worker.properties file mit der
variable 'cachesize' eingestellt. Ist diese cache size kleiner als die
anzahl der apache threads pro prozess, besteht die moeglichkeit, dass der
apache mehr gleichzeitige verbindungen zu den tomcats aufbauen moechte
als es slots in diesen pools gibt, was in einem HTTP 503 error endet.
Loesung: ThreadsPerChild niedriger oder worker.*.cachesize hoeher
einstellen so das ThreadsPerChild <= worker.*.cachesize ist.
Ad JK Loadbalancer: Dieser achtet nicht auf die cachesizes. D.h. wenn der
mod_jk loadbalancer verwendet wird muss jede einzelne worker cachesize
entsprechend dimensioniert sein, nicht einfach nur ihre summe.
In neueren mod_jk versionen hat die 'cachesize' variable den sprechenderen
namen 'connection_pool_size'.