是否有配置tomcat来保留特定servlet或webservice的线程? 我知道这可能是在servlet过滤器中以编程方式完成的。
所以假设我使用250个服务线程的默认配置,但是我想要为特定的servlet / webservice保留20个?
也许这显然是不可能的 - 如果是这样,有人可以解释一下原因吗?
我正在使用tomcat 6。
答案 0 :(得分:8)
根据servlet规范,这是不可能的。但是在Tomcat中,您可以定义在不同端口上运行的多个连接器。每个连接器都有一个单独的线程池:
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="10443" />
您将找到如何在Tomcat的server.xml
文件undere /conf
目录中配置线程池的示例。
现在,您可以使用8080(默认)和8081(上面配置)访问您的Web应用程序。通过8081的请求将使用不同的线程池。您现在要做的就是将所有servlet路由到8080,将您的特定线程路由到8081(使用完全独立的线程池)。
如果您不希望有人滥用此功能,请添加一个servlet过滤器,以根据请求的URI检查是否使用了正确的端口。
但请阅读您的理由:
我有一个锁定很多服务线程的特定同步服务
您最好启动并管理自己的线程池(查看ExecutorService
)并使用异步servlet。更加简单和便携。
答案 1 :(得分:-3)
你为什么要这样做?
Tomcat处理线程正常,如果达到最大值,则无论如何都需要增加最大值。那么保留一些会有什么好处呢?保留一些只是意味着你可以更快地达到最大值,并且在不需要时不能有效地使用它们。
总之不要这样做。