Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将Tomcat线程专用于servlet_Java_Multithreading_Tomcat_Servlets - Fatal编程技术网

Java 将Tomcat线程专用于servlet

Java 将Tomcat线程专用于servlet,java,multithreading,tomcat,servlets,Java,Multithreading,Tomcat,Servlets,是否有必要将tomcat配置为保留特定servlet或Web服务的线程? 我知道这可能是通过servlet过滤器编程实现的 因此,假设我使用250个服务线程的默认配置,但我希望其中20个线程保留给特定的servlet/webservice 也许这显然是不可能的——如果可能的话,有人能解释一下原因吗 我正在使用tomcat 6。为什么要这样做 Tomcat处理线程很好,如果达到最大值,无论如何都需要增加最大值。那么,保留一些会有什么好处呢?保留一些只是意味着你更快地达到最大值,在不需要的时候不能有

是否有必要将tomcat配置为保留特定servlet或Web服务的线程? 我知道这可能是通过servlet过滤器编程实现的

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

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


我正在使用tomcat 6。

为什么要这样做

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


简而言之,不要这样做。

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

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

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

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

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


然而,阅读你的理由:

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


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

为什么要这样做?Tomcat处理线程很好这样做的意义是什么?是的,同意这可能是一个奇怪的用例。我有一个特定的同步服务,它锁定了许多服务线程。可能会扼杀整个应用程序。再加上糟糕的设计,这将很快被重构。所以我只是想看看是否可以限制同步的线程数量。服务,这样就不会发生,从而在短时间内解决了我的问题。除非你把你的webapp分成多个部分,否则我认为你无法做到这一点。如果您有多个Web应用程序,您还可以将其中一些应用程序配置为在多个应用程序之间共享池。感谢您的回答!仔细想想,我不认为这是一个如此奇怪的用例。但是在tomcat文档中没有关于这方面的参考,所以我猜这是不可能的。隔离(几乎是“沙箱”)web服务本身并不是一个坏主意。例如,我想我做不到。但是,为什么限制一项服务的最大服务线程数是一个坏主意,因为该服务往往会在服务器上产生极端负载,而所有其他服务都不会-请你解释一下为什么Nimchinpsky?@fante你只是在移动瓶颈。我自己不明白这一点。修复你所说的需要重构的代码。@Nimsky说得很对,它会完成的,但重构需要一些时间,只是希望“快速修复”,然后我对用例本身产生了兴趣。谢谢你的帮助!这个答案属于问题的评论,因为你们所做的只是寻求澄清。我找到这篇文章是因为我有同样的动机。我的web服务有两种类型的客户端:有数千种类型A(其他后台服务)和少数类型B,通常由用户UI驱动。我想保留一些线程,以便专用于类型B的servlet在类型A客户端的突发或重载期间继续响应,这可以轻松地最大化我为这些servlet设置的任何合理线程池限制。感谢Tomasz的帮助!我想这将是解决问题的配置方法。