概述
最近公司项目操作十分卡顿,一直以为是数据量的问题,因为公司项目是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做调优,本文就不展开了。
参考
https://cloud.tencent.com/developer/article/1614179
https://zthinker.com/archives/springboot20actuator监控指标分析
原文始发于微信公众号(JAVA旭阳):Tomcat监控指标判断应用死了吗
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/63800.html