Tell Tomcat to drop requests instead of dying "All threads (150) are currently busy"

Posted by Nicolas Raoul on Server Fault See other posts from Server Fault or by Nicolas Raoul
Published on 2012-07-02T05:52:11Z Indexed on 2012/07/03 3:18 UTC
Read the original article Hit count: 409

Filed under:
|
|

My Tomcat 6.0.26 sometimes dies saying:

SEVERE: All threads (150) are currently busy, waiting. Increase maxThreads (150) or check the servlet status

... then Tomcat shuts down, and users can't access the webapp until I restart Tomcat manually.

Some of the threads indeed take a long time to execute, it is by-design, not a thread-gone-wild problem.

I know I could increase maxThreads, but that is not a viable solution, because the server might receive requests even more requests.

QUESTION: Instead of dying, can I tell Tomcat to just drop requests when maxThreads is reached and the AJP/1.3 backlog is full?

Below is my server.xml in any case:

<?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>

© Server Fault or respective owner

Related posts about tomcat

Related posts about threads