无论如何配置tomcat以将线程保留给特定的servlet或webservice?我知道这可能可以在 servlet 过滤器中以编程方式完成。
所以假设我使用 250 个服务线程的默认配置,但我希望为特定的 servlet/webservice 保留其中的 20 个?
也许这显然是不可能的——如果可以的话,有人可以解释一下原因吗?
我正在使用tomcat 6。
无论如何配置tomcat以将线程保留给特定的servlet或webservice?我知道这可能可以在 servlet 过滤器中以编程方式完成。
所以假设我使用 250 个服务线程的默认配置,但我希望为特定的 servlet/webservice 保留其中的 20 个?
也许这显然是不可能的——如果可以的话,有人可以解释一下原因吗?
我正在使用tomcat 6。
根据 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。更简单和便携。
你为什么要这样做?
Tomcat 可以很好地处理线程,如果达到最大值,则无论如何都需要增加最大值。那么保留一些有什么好处呢?保留一些只是意味着您可以更快地达到最大值,并且在不需要时不会有效地使用它们。
简而言之,不要这样做。