如何使用码头和 spring 引导收集和获取连接池统计信息?

How to collect and get connection pool statistics using jetty and spring boot?

我正在开发带有嵌入式 Jetty 服务器的简单 Spring 引导 Web 应用程序。

我想要一些关于连接池使用情况的统计数据(即有多少线程、平均请求时间、平均队列等待时间、队列大小等)

我意识到 Spring Boot 使用几乎没有基本指标的 QueuedThreadPool 配置 Jetty。在 Spring Boot 中是否有更复杂的 bean 或模块指定用于统计信息收集?如何开启?

您看过 Spring 引导执行器了吗? 它为您提供了一些生产就绪的功能,例如健康端点和指标端点。 看看文档 https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html

有一个收集统计信息的 MonitoredQueuedThreadPool 实现。下面的代码启用它并通过 JMX 公开:

@Bean
public JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory(@Value("${server.port:8080}") final String port) {

    JettyEmbeddedServletContainerFactory factory =  new JettyEmbeddedServletContainerFactory(Integer.valueOf(port));

    //enable thread pool with stats
    factory.setThreadPool(new MonitoredQueuedThreadPool());

    //enable JMX
    factory.addServerCustomizers(server -> {
        MBeanContainer mbContainer=new MBeanContainer(ManagementFactory.getPlatformMBeanServer());
        server.addEventListener(mbContainer);
        server.addBean(mbContainer);
        server.addBean(Log.getLog());

    });

    return factory;
}

JMX bean 在节点下公开:

它提供指标: