我在一个Tomcat容器下运行多个Web应用程序。由于它们都在单个Tomcat连接器下运行(如server.xml文件中所定义),因此maxConnections和maxThreads等属性将整个容器控制在容器中。因此,单个应用程序可能会占用所有可用的Tomcat线程,使线程的其他应用程序匮乏并使它们无响应。我希望能够在每个上下文的基础上定义最大的http线程,这样就不再可能了。
这是我迄今为止所做的尝试:
还有其他人遇到过这样的事吗?我觉得应该有#34; Tomcat支持"完成我之后的工作流程。
答案 0 :(得分:1)
我将发布从Tomcat用户组提供给我的答案:http://tomcat.apache.org/tomcat-9.0-doc/config/valve.html#Semaphore_Valve(Semaphore Valve不是特定于Tomcat 9,但实际上是在Tomcat 6中引入的)。我试验了这个概念,并找到了以下实际应用:
这不一定是我要使用的解决方案,因为需要执行更多测试。但是,我认为我添加了这个,因为它是解决问题的潜在答案。
更新
作为回顾,SemaphoreValve是我通过Tomcat用户邮件列表推荐给我的一个选项,作为我上面描述的问题的解决方案。事实证明它比我预期的更容易实现。将以下内容添加到Tomcat / conf目录中的context.xml可以解决问题:
<Valve className="org.apache.catalina.valves.SemaphoreValve" concurrency="10" fairness="true" />
感谢Apache小组的Mark Thomas提供解决方案。