【问题标题】:Monitoring Springboot 2.0 Tomcat server Thread utilization监控 Springboot 2.0 Tomcat 服务器线程利用率
【发布时间】:2019-12-25 14:18:15
【问题描述】:

我已经使用以下 tomcat 参数启动了我的 springboot 应用程序

-Dserver.tomcat.max-threads=400
-Dserver.tomcat.max-connections=4000

我想监控繁忙的线程和繁忙的连接大小?

springboot里面有内置解决方案吗?否则我需要获取 mbeans 吗?

找到类似的question,但尚未给出解决方案。

谢谢。

【问题讨论】:

标签: java spring-boot tomcat monitoring


【解决方案1】:

起初,我使用 Spring Boot Actuator 和 Micrometer。但它没有显示tomcat线程利用率。所以我像这样配置了application.yml。

server:
  port: 3200
  address: 0.0.0.0
  tomcat:
    max-threads: 4000
    mbeanregistry:
      enabled: true

我将server.tomcat.mbeanregistry.enabled 设置为真。然后 Tomcat 线程利用率显示在 /actuator/metrics 中。

这是我的输出。

{
  "names": [
    "http.server.requests",
    "http.server.requests.histogram",
    "jvm.buffer.count",
    "jvm.buffer.memory.used",
    "jvm.buffer.total.capacity",
    "jvm.classes.loaded",
    "jvm.classes.unloaded",
    "jvm.gc.live.data.size",
    "jvm.gc.max.data.size",
    "jvm.gc.memory.allocated",
    "jvm.gc.memory.promoted",
    "jvm.gc.pause",
    "jvm.memory.committed",
    "jvm.memory.max",
    "jvm.memory.used",
    "jvm.threads.daemon",
    "jvm.threads.live",
    "jvm.threads.peak",
    "jvm.threads.states",
    "logback.events",
    "process.cpu.usage",
    "process.files.max",
    "process.files.open",
    "process.start.time",
    "process.uptime",
    "system.cpu.count",
    "system.cpu.usage",
    "system.load.average.1m",
    "thread.pool.core.size",
    "thread.pool.max.size",
    "thread.pool.pool.size",
    "thread.pool.thread.count",
    "tomcat.cache.access",
    "tomcat.cache.hit",
    "tomcat.global.error",
    "tomcat.global.received",
    "tomcat.global.request",
    "tomcat.global.request.max",
    "tomcat.global.sent",
    "tomcat.servlet.error",
    "tomcat.servlet.request",
    "tomcat.servlet.request.max",
    "tomcat.sessions.active.current",
    "tomcat.sessions.active.max",
    "tomcat.sessions.alive.max",
    "tomcat.sessions.created",
    "tomcat.sessions.expired",
    "tomcat.sessions.rejected",
    "tomcat.threads.busy",
    "tomcat.threads.config.max",
    "tomcat.threads.current"
  ]
}

【讨论】:

  • 你能分享你正在监控的输出参数吗
  • @AhmetKarakaya 我在答案中添加了一个输出。是你想看的吗?
  • @Wachira 我已经在我的 spring boot application.properties 中启用了这个属性。还有其他事情要做吗?我仍然没有在输出中看到这些指标。
【解决方案2】:

一个简单的方法是使用带有Micrometer 的Spring Actuator。您可以获得即时 JMX 指标,还可以声明自己的自定义指标。

【讨论】:

    【解决方案3】:

    您可以使用Spring Boot Actuator(/metrics 端点)提供有关内存、堆、处理器、线程、加载的类、卸载的类、线程池等的信息。

    例如,此端点返回:

    "threads.peak" : ...,
    "threads.daemon" : ...,
    "threads" : ...,
    

    此外,如果需要,您可以使用 /threaddump 端点获取线程转储。

    【讨论】:

    • 但这给出了应用程序中的所有线程,但我需要专注于 tomcat 线程?