server.xml 之 Executor 元素

Executor 代表一个线程池,可以在 Tomcat 中的组件之间共享。从历史上看,每个连接器都创建了一个线程池,但这允许您在(主要是)连接器和其他组件之间共享线程池(当这些组件被配置为支持执行器时)。

执行器必须实现 org.apache.catalina.Executor 接口。

执行器是 Service 元素的嵌套元素。并且为了让连接器接收到它,Executor 元素必须出现在 server.xml 中的 Connector 元素之前。示例配置:

<Service name="Catalina">
    ...
    <!--The connectors can use a shared executor, you can define one or more named thread pools-->
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>
    ...
</Service>

属性

通用属性

Executor 的所有实现都支持以下属性:

  • className  实现的类。该实现必须实现 org.apache.catalina.Executor 接口。这个接口保证了对象可以通过它的name属性被引用并且实现了Lifecycle,这样它就可以和容器一起启动和停止。className 的默认值是 org.apache.catalina.core.StandardThreadExecutor

  • name  用于在 server.xml 中的其他位置引用此线程池的名称。该线程池名称是必需的,并且必须是唯一的。

标准实现

默认实现支持以下属性:

  • threadPriority  (int) executor中线程的线程优先级,默认为5(Thread.NORM_PRIORITY常量的值)

  • daemon  (boolean) 线程是否应该是守护线程,默认为true

  • namePrefix  (string) 执行程序创建的每个线程的名称前缀。单个线程的线程名称将为 namePrefix + threadNumber

  • maxThreads  (int) 此池中最大活动线程数,默认为 200

  • minSpareThreads  (int) 始终保持活动状态的最小线程数(空闲和活动),默认为 25

  • maxIdleTime  (int) 空闲线程关闭前的毫秒数,除非活动线程数小于或等于 minSpareThreads。默认值为 60000(1 分钟)

  • maxQueueSize  (int) 在我们拒绝它们之前可以排队等待执行的可运行任务的最大数量。默认值为 Integer.MAX_VALUE

  • prestartminSpareThreads  (boolean) 启动 Executor 时是否启动 minSpareThreads,默认为 false

  • threadRenewalDelay  (long) 如果配置了 ThreadLocalLeakPreventionListener,它将通知此执行程序有关已停止的上下文。上下文停止后,池中的线程将被更新。为避免同时更新所有线程,此选项设置更新任意 2 个线程之间的延迟。该值以毫秒为单位,默认值为 1000 毫秒。如果值为负,则不更新线程。

示例配置

下面是从 server.xml 配置文件中截取的配置片段:

<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
  ..
  <Service name="Catalina">
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>
    ...
  </Service>
</Server>
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号