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: 439
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