Tomcat监控指标判断应用“死了“吗

发布于:2022-12-11 ⋅ 阅读:(679) ⋅ 点赞:(0)

概述

最近公司项目操作十分卡顿,一直以为是数据量的问题,因为公司项目是to B项目,用户流量比较少,部署的节点也就2个,后来发现是tomcat的线程不够导致的,最终把tomcat的性能指标输出到监控平台上,及时提醒。本篇文章主要帮助大家解决下面的几个问题:

  1. tomcat的监控指标有哪些?
  2. springboot引用中如何查看监控指标?
  3. 如何判断tomcat达到瓶颈,需要扩容了?

SpringBoot中集成监控指标

目前基本上大部分的应用都是springboot应用,本节以springboot为例,讲解如何集成tomcat的监控指标:

  1. 引入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
 <dependency>
  	<groupId>io.micrometer</groupId>
  	<artifactId>micrometer-core</artifactId>
  	<version>1.9.3</version>
</dependency>
复制代码
  • spring-boot-starter-web: springboot web应用的依赖
  • spring-boot-starter-actuator:监控指标通过actuator的端口暴露出去
  • micrometer-core:集成了tomcat的指标的jar

如果需要输出到prometheus等监控平台,可以直接引入下面的依赖:

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
    <version>1.9.3</version>
</dependency>
复制代码
  1. 配置文件配置参数
server:
  port: 8888
  tomcat:
    threads:
      ## tomcat线程最大数量
      max: 1000
    ## 开启tomcat监控
    mbeanregistry:
      enabled: true
          
## 打开所有端点
management:
  endpoints:
    web:
      exposure:
        include: "*"
复制代码
  • 如果需要输出全量的监控指标需要server.tomcat.mbeanregistry.enabled等于true
  • 需要设置management.endpoints.web.exposure.include= *,开启查看的端点
  1. 启动应用,查看指标

请求http://localhost:8888/actuator/metrics,可以查看监控信息:

具体监控内容的查看方式如下:

  1. 原理起底

micrometer-core中有个TomcatMetrics类,会将tomcat的指标注册进去。

tomcat监控指标说明

下面是罗列了tomcat相关的监控指标和对应的说明:

指标代码 说明 建议
tomcat.sessions.created tomcat已创建session数
tomcat.sessions.expired tomcat已过期session数
tomcat.sessions.active.current tomcat当前活跃的session数
tomcat.sessions.active.max tomcat最多活跃的session数 建议显示在监控页面,超过阈值可报警或者进行动态扩容
tomcat.sessions.alive.max.second tomcat最多活跃session数持续时间
tomcat.sessions.rejected 超过session最大配置后,拒绝的session个数 显示在监控页面,方便分析问题
tomcat.global.error 错误总数 显示在监控页面,方便分析问题
tomcat.global.sent 全局request次数和时间
tomcat.global.received 全局received次数和时间
tomcat.servlet.request servlet的请求次数和时间
tomcat.servlet.error servlet发生错误总数
tomcat.servlet.request.max servlet请求最长时间
tomcat.threads.busy tomcat繁忙线程 显示在监控页面,据此检查是否有线程夯住
tomcat.threads.current tomcat当前线程数(包括守护线程) 显示在监控页面
tomcat.threads.config.max tomcat中配置最大的线程数 显示在监控页面
tomcat.connections.config.max tomcat接收和处理的最大连接数 显示在监控页面
tomcat.connections.current tomcat当前接收和处理的连接数 显示在监控页面
tomcat.connections.keepalive.current tomcat当前长连接数量 显示在监控页面
tomcat.cache.access tomcat读取缓存次数
tomcat.cache.hit tomcat缓存命中次数

总结

我们通过tomcat监控指标的tomcat.threads.busytomcat.threads.currenttomcat.connections.currenttomcat.sessions.active.max等判断tomcat是否达到了瓶颈,如果是的话,就需要扩展节点或者调优处理。

其实合理运用这些参数指标的一个前提是需要对tomcat本身的架构有一个深入的认识,然后基于这些指标去对tomcat做调优,本文就不展开了。