You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Jetty迁移至Spring后,如何在Spring Boot Actuator中获取空闲线程数指标?

获取Spring应用中空闲线程数指标的方法

1. 继续使用Jetty作为Spring Boot内嵌容器

如果迁移到Spring Boot后仍保留Jetty作为Web容器,可直接启用Jetty原生指标:

  • 引入依赖:确保项目包含spring-boot-starter-jetty和spring-boot-starter-actuator
  • 配置开启Jetty指标:在配置文件中添加
    management.metrics.enable.jetty=true
    
  • 即可获取与原Jetty逻辑一致的指标(Spring Boot采用点分隔命名):jetty.queued-thread-pool.threads(总线程数)和jetty.queued-thread-pool.threads.idle(空闲线程数)

2. 使用Tomcat作为默认内嵌容器

Spring Boot默认使用Tomcat,可通过以下方式获取空闲线程相关指标:

  • 引入spring-boot-starter-actuator依赖
  • 配置开启Tomcat指标:
    management.metrics.enable.tomcat=true
    
  • 核心可用指标:
    • tomcat.threads.config.max:线程池最大线程数
    • tomcat.threads.current:当前活跃线程数
    • tomcat.threads.idle:直接的空闲线程数(Spring Boot 2.2及以上版本支持)
  • 若版本不支持直接的idle指标,可通过max - current计算得到空闲线程数

3. 使用Undertow作为内嵌容器

若选择Undertow作为Web容器,步骤如下:

  • 引入spring-boot-starter-undertow和spring-boot-starter-actuator
  • 配置开启Undertow指标:
    management.metrics.enable.undertow=true
    
  • 可直接获取undertow.threads.idle指标,同时还有undertow.threads.current、undertow.threads.core等辅助指标

4. 自定义线程池的空闲指标(通用方案)

如果应用使用自定义线程池(非Web容器线程池),可通过自定义指标暴露空闲线程数:

  • 利用Spring Boot的MeterRegistry结合线程池API实现,示例代码:
    @Component
    public class CustomThreadPoolIdleMetrics {
        private final ThreadPoolTaskExecutor customThreadPool;
        private final MeterRegistry meterRegistry;
    
        public CustomThreadPoolIdleMetrics(ThreadPoolTaskExecutor customThreadPool, MeterRegistry meterRegistry) {
            this.customThreadPool = customThreadPool;
            this.meterRegistry = meterRegistry;
            registerIdleThreadMetric();
        }
    
        private void registerIdleThreadMetric() {
            Gauge.builder("custom.thread.pool.idle.threads",
                    () -> customThreadPool.getMaxPoolSize() - customThreadPool.getActiveCount())
                    .description("Number of idle threads in custom thread pool")
                    .baseUnit("threads")
                    .register(meterRegistry);
        }
    }
    
  • 启动应用后,即可通过Actuator端点获取custom.thread.pool.idle.threads指标

5. JVM层面的近似计算

如果不想依赖容器或自定义指标,可通过JVM线程状态指标近似计算:

  • 从jvm_threads_states_threads中筛选状态为WAITING或TIMED_WAITING的线程数,这类线程通常处于空闲等待任务的状态
  • 注意:该方式会包含非线程池的JVM线程,结果为近似值,精度不如容器或自定义指标

内容的提问来源于stack exchange,提问作者Sankalp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 06:18:32