我的Tomcat 6.0.26有时会死亡说:
严重:所有线程(150)当前正忙,正在等待。 增加maxThreads(150)或检查servlet状态
…然后Tomcatclosures,用户无法访问该Web应用程序,直到我手动重新启动Tomcat。
有些线程确实需要很长时间才能执行,这是通过devise,而不是一个线程无效的问题。
我知道我可以增加maxThreads,但这不是一个可行的解决scheme,因为服务器可能会收到请求甚至更多的请求。
问题:在达到maxThreads并且AJP / 1.3积压已满时,我可以告诉Tomcat放弃请求吗?
以下是我的server.xml在任何情况下:
<?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>
Tomcat不会因为线程超时而崩溃。 它将请求排队到在acceptCount中设置的限制,然后拒绝请求,如果最大的话。