概述
最近公司项目操作十分卡顿,一直以为是数据量的问题,因为公司项目是to B项目,用户流量比较少,部署的节点也就2个,后来发现是tomcat的线程不够导致的,最终把tomcat的性能指标输出到监控平台上,及时提醒。本篇文章主要帮助大家解决下面的几个问题:
- tomcat的监控指标有哪些?
- springboot引用中如何查看监控指标?
- 如何判断tomcat达到瓶颈,需要扩容了?
SpringBoot中集成监控指标
目前基本上大部分的应用都是springboot应用,本节以springboot为例,讲解如何集成tomcat的监控指标:
- 引入依赖
<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>
- 配置文件配置参数
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= *
,开启查看的端点
- 启动应用,查看指标
请求http://localhost:8888/actuator/metrics,可以查看监控信息:
具体监控内容的查看方式如下:
网络异常,图片无法展示
|
- 原理起底
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.busy
、tomcat.threads.current
、tomcat.connections.current
、tomcat.sessions.active.max
等判断tomcat是否达到了瓶颈,如果是的话,就需要扩展节点或者调优处理。
其实合理运用这些参数指标的一个前提是需要对tomcat本身的架构有一个深入的认识,然后基于这些指标去对tomcat做调优,本文就不展开了。