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

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

概述


最近公司项目操作十分卡顿,一直以为是数据量的问题,因为公司项目是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,可以查看监控信息:

1671187808711.jpg

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

网络异常,图片无法展示
|

  1. 原理起底

1671187825339.jpg

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做调优,本文就不展开了。

目录
相关文章
|
6月前
|
Arthas 监控 Java
Arthas 可以用于监控和诊断在 Windows 系统下部署的 Tomcat 服务
Arthas 可以用于监控和诊断在 Windows 系统下部署的 Tomcat 服务
814 2
|
监控 Java 应用服务中间件
Tomcat打开远程调试和jmx远程监控
Tomcat打开远程调试和jmx远程监控
|
1月前
|
应用服务中间件 数据库
Tomcat 的数据库连接池设置与应用
Tomcat 的数据库连接池设置与应用
38 3
|
5月前
|
Ubuntu 前端开发 JavaScript
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
|
3月前
|
缓存 前端开发 Java
【Azure 应用服务】App Service 使用Tomcat运行Java应用,如何设置前端网页缓存的相应参数呢(-Xms512m -Xmx1204m)?
【Azure 应用服务】App Service 使用Tomcat运行Java应用,如何设置前端网页缓存的相应参数呢(-Xms512m -Xmx1204m)?
|
4月前
|
监控 安全 Java
使用JMX监控Tomcat
【7月更文挑战第18天】
|
5月前
|
监控 Java 应用服务中间件
详解tomcat中的jmx监控
详解tomcat中的jmx监控
134 1
|
6月前
|
存储 安全 Java
从HTTP到Tomcat:揭秘Web应用的底层协议与高性能容器
从HTTP到Tomcat:揭秘Web应用的底层协议与高性能容器
|
监控 Java 应用服务中间件
zabbix监控tomcat
zabbix监控tomcat
91 0
|
监控 Java 应用服务中间件
tomcat多实例优化及zabbix监控群集(一)
tomcat多实例优化及zabbix监控群集
151 0