我有多个Web应用程序在单个Tomcat容器下运行。由于它们都在单个Tomcat连接器下运行(如server.xml文件中定义的),因此maxConnections和maxThreads等属性管理整个容器。因此,单个应用程序可能会消耗所有可用的Tomcat线程,使其他应用程序无法获得线程并使它们无响应。我希望能够按上下文定义每个http线程的最大数量,以便不再可能出现这种情况。
到目前为止,我尝试过以下方法:
到目前为止,我尝试过以下方法:
- 在应用程序中创建一个自定义过滤器,跟踪当前线程计数并限制额外的连接。(在这里找到了过滤器:如何在servlet中设置并发请求的数量限制?)。我不确定我喜欢这个解决方案,因为它不像Tomcat默认提供给容器的支持(如acceptCount、maxConnections、maxThreads和minSpareThreads等属性)那样全面;而添加这些功能感觉就像是我在尝试构建已经存在于Tomcat中的内容。
- 在server.xml文件中为每个上下文创建一个单独的Tomcat连接器。这有一些问题。首先,每个连接器都需要一个单独的端口;这意味着我必须在我的apache配置中考虑这个问题。其次,我计划定期添加更多的Web应用程序;这意味着需要进行配置更改,然后进行Tomcat重启,这会对客户产生干扰。
还有其他人遇到过类似的情况吗?我觉得应该有一种“Tomcat支持”的工作流来实现我想要的东西。