将Tomcat线程专用于servlet

cal*_*ger 10 java multithreading tomcat servlets

反正有没有配置tomcat来保留特定servlet或webservice的线程?我知道这可能是在servlet过滤器中以编程方式完成的.

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

也许这显然是不可能的 - 如果是这样,有人可以解释为什么?

我正在使用tomcat 6.

Tom*_*icz 9

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

<Connector port="8081" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="10443" />
Run Code Online (Sandbox Code Playgroud)

您将找到如何在Tomcat 中的server.xml文件undere /conf目录中配置线程池的示例.

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

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


无论如何阅读你的理由:

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

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


Nim*_*sky -6

你为什么要这样做?

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

简而言之,不要这样做。

  • 隔离(几乎是“沙箱”)Web 服务本身并不是一个坏主意。例如,请参阅[这篇 Netflix 博客文章](http://techblog.netflix.com/2012/02/fault-tolerance-in-high-volume.html)。 (2认同)