美文网首页
Tomcat Connector 和线程池(Executor)的

Tomcat Connector 和线程池(Executor)的

作者: SnailFast | 来源:发表于2019-09-16 22:03 被阅读0次

简介

        关于Tomcat Connector 的结构可以参考Tomcat网络模型,这里主要说一下与Connector关联的线程池。

        每个 Connector 需要关联一个线程池,每当 Connector 接收到请求时,需要交给线程池去处理。 Connector 可以关联共享的线程池,也可以创建私有的线程池。

共享线程池

        Connector属于Service Container,多个Connector要想共享线程池,则线程池也应该配置在Service Container中,如下图所示

共享线程池配置

         上图中在Service Container中配置了两个线程池(请忽略参数值的合理性),分别命名为tomcatThreadPool-01和tomcatThreadPool-02,并将两个Connector都与tomcatThreadPool-01关联。Tomcat启动的时候,会分别创建两个线程池tomcatThreadPool-01和tomcatThreadPool-02,只是tomcatThreadPool-02线程池没有用上。这样两个Container就共享了一个tomcatThreadPool-01线程池。通过Tomcat自带的Manager页面和JConsole都可以印证这一点,如下图所示。

Tomcat自带的Manager页面 JConsole中的Connector和Executor 8057Connector的Executor 8077Connector的Executor

        在Connector的配置中一旦配置了executor属性,则该Connector所有与线程池有关的配置全都失效。通过Tomcat自带的Manager页面查看Max threads的值为-1,但是实际的配置是生效了的,也就是在Executor中配置的maxThreads是生效的,通过JConsole可以验证这一点,官网也对此给出了解释,如下图所示。

JConsole中的tomcatThreadPool-01线程池 官网给出的关于maxThreads=-1的解释

私有线程池

        Connector除了使用共有的线程池,也可以使用独自的线程池,配置方式如下图所示。

私有线程池配置

        通过Tomcat自带的Manager页面和JConsole都可以上图配置生效了,如下图所示。

通过JConsole查看Connector查看线程池 8057Connector的maxThreads为150 8077Connector的maxThreads为180

        总结

        Tomcat每个Connector都需要关联一个线程池,可以是几个Connector共享一个,也可以是每个Connector独自使用一个。至于线程池具体的参数配置,需要根据实际情况来设置,不在本文讨论范围之内。

相关文章

网友评论

      本文标题:Tomcat Connector 和线程池(Executor)的

      本文链接:https://www.haomeiwen.com/subject/dbgqyctx.html