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

1,381 阅读3分钟

“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第7篇文章,点击查看活动详情

概述

最近公司项目操作十分卡顿,一直以为是数据量的问题,因为公司项目是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.createdtomcat已创建session数
tomcat.sessions.expiredtomcat已过期session数
tomcat.sessions.active.currenttomcat当前活跃的session数
tomcat.sessions.active.maxtomcat最多活跃的session数建议显示在监控页面,超过阈值可报警或者进行动态扩容
tomcat.sessions.alive.max.secondtomcat最多活跃session数持续时间
tomcat.sessions.rejected超过session最大配置后,拒绝的session个数显示在监控页面,方便分析问题
tomcat.global.error错误总数显示在监控页面,方便分析问题
tomcat.global.sent全局request次数和时间
tomcat.global.received全局received次数和时间
tomcat.servlet.requestservlet的请求次数和时间
tomcat.servlet.errorservlet发生错误总数
tomcat.servlet.request.maxservlet请求最长时间
tomcat.threads.busytomcat繁忙线程显示在监控页面,据此检查是否有线程夯住
tomcat.threads.currenttomcat当前线程数(包括守护线程)显示在监控页面
tomcat.threads.config.maxtomcat中配置最大的线程数显示在监控页面
tomcat.connections.config.maxtomcat接收和处理的最大连接数显示在监控页面
tomcat.connections.currenttomcat当前接收和处理的连接数显示在监控页面
tomcat.connections.keepalive.currenttomcat当前长连接数量显示在监控页面
tomcat.cache.accesstomcat读取缓存次数
tomcat.cache.hittomcat缓存命中次数

总结

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

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

参考

cloud.tencent.com/developer/a…

zthinker.com/archives/sp…