11

无论如何配置tomcat以将线程保留给特定的servlet或webservice?我知道这可能可以在 servlet 过滤器中以编程方式完成。

所以假设我使用 250 个服务线程的默认配置,但我希望为特定的 servlet/webservice 保留其中的 20 个?

也许这显然是不可能的——如果可以的话,有人可以解释一下原因吗?

我正在使用tomcat 6。

4

2 回答 2

11

根据 servlet 规范,这是不可能的。但是在 Tomcat 中,您可以定义在不同端口上运行的多个连接器。每个连接器都有一个单独的线程池:

<Connector port="8081" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="10443" />

您将在 Tomcat的server.xml文件下找到如何配置线程池的示例。/conf

现在您可以使用 8080(默认)和 8081(上面配置)访问您的 Web 应用程序。通过 8081 的请求将使用不同的线程池。您现在所要做的就是将所有 servlet 路由到 8080,并将您的特定线程路由到 8081(使用完全独立的线程池)。

如果您不希望有人滥用此功能,请添加一个 servlet 过滤器以根据请求的 URI 检查是否使用了正确的端口。


但是阅读您的理由:

我有一个特定的同步服务,它锁定了很多服务线程

您最好启动和管理自己的线程池(请参阅ExecutorService)并使用异步 servlet。更简单和便携。

于 2012-09-25T13:16:24.600 回答
-6

你为什么要这样做?

Tomcat 可以很好地处理线程,如果达到最大值,则无论如何都需要增加最大值。那么保留一些有什么好处呢?保留一些只是意味着您可以更快地达到最大值,并且在不需要时不会有效地使用它们。

简而言之,不要这样做。

于 2012-09-25T13:12:43.030 回答