1 votos

Dígale a Tomcat a la caída de las solicitudes en lugar de morir "Todos los hilos (150) están ocupados"

Mi Tomcat 6.0.26 a veces muere diciendo:

GRAVE: Todos los hilos (150) están ocupados, a la espera. Aumentar maxThreads (150) o comprobar el estado de servlet

... luego de Tomcat se apaga, y los usuarios no pueden acceder a la webapp hasta que reiniciar Tomcat de forma manual.

Algunos de los hilos, de hecho, tomar un largo tiempo para ejecutar, es por diseño, no un hilo salvaje problema.

Sé que podría aumentar maxThreads, pero que no es una solución viable, debido a que el servidor puede recibir solicitudes aún más solicitudes.

PREGUNTA: en Lugar de morir, puedo decir que Tomcat simplemente introduce las solicitudes cuando maxThreads es alcanzado y la AJP/1.3 atraso es completo?

A continuación es mi server.xml en cualquier caso:

<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JasperListener" />
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
  <Service name="Catalina">
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" minSpareThreads="100"/>
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"
               enableLookups="false" useBodyEncodingForURI="true"
               backlog="150" maxThreads="150" executor="tomcatThreadPool"
               keepAliveTimeout="5000" connectionTimeout="300000" />
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="ecm1">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
      </Host>
    </Engine>
  </Service>
</Server>

1voto

Jason Floyd Puntos 885

Tomcat no se cuelgue solo porque los hilos son maximizados. Se pone en cola las solicitudes hasta el límite fijado en acceptCount y, a continuación, se niega solicitudes si que se maximiza.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: