Tomcat在CentOS上的监控方案
一 监控目标与分层
- 基础设施层:CPU、内存、磁盘IO、网络,关注系统负载与资源瓶颈对Tomcat的影响。
- JVM层:堆与非堆内存、GC次数与停顿、类加载、线程数,定位内存与GC问题。
- Tomcat层:连接器线程池(当前线程、繁忙线程、队列)、请求吞吐与耗时、错误率、会话数。
- 应用层:关键业务接口可用性、数据库/缓存连接池使用、慢查询与异常日志。
二 快速落地方案 Prometheus JMX Exporter
- 部署JMX Exporter
- 下载并放置代理:/usr/local/prometheus/jmx_prometheus_javaagent-0.3.1.jar
- 创建规则:/usr/local/prometheus/jmx-exporter.yaml(示例已覆盖 GlobalRequestProcessor、ThreadPool、Manager/Session、Servlet 等关键MBean)
- 配置Tomcat启动参数
- 编辑 $CATALINA_HOME/bin/catalina.sh,在 JAVA_OPTS 中追加:
-javaagent:/usr/local/prometheus/jmx_prometheus_javaagent-0.3.1.jar=9010:/usr/local/prometheus/jmx-exporter.yaml
- 重启Tomcat:systemctl restart tomcat
- 验证与抓取
- 访问 http://:9010/jmx 确认指标暴露
- Prometheus 配置抓取 job(示例):
- job_name: ‘tomcat-jmx’
static_configs:
- 建议告警规则(示例)
- 线程池繁忙比例高:1 - (tomcat_threadpool_currentThreadCount{protocol=“http-nio”} - tomcat_threadpool_currentThreadsBusy) / tomcat_threadpool_currentThreadCount > 0.8
- HTTP 5xx 增多:rate(tomcat_global_error_total{name=“http-nio”}[1m]) > 0
- Full GC 频繁:rate(jvm_gc_collection_seconds_sum{gc=“G1 Full”}[5m]) > 0.1
- 老年代使用率高:jvm_memory_pool_bytes_used{pool=“G1 Old Gen”} / jvm_memory_pool_bytes_max{pool=“G1 Old Gen”} > 0.85
- 说明
- 若使用 Spring Boot,可直接暴露 /actuator/prometheus;传统WAR包建议优先用 JMX Exporter 采集Tomcat与JVM指标。
三 系统与服务自检脚本
- 进程与端口
- 进程存活:ps -ef | grep tomcat | grep -v grep
- 端口连通:ss -lntp | grep 8080 或 curl -I http://127.0.0.1:8080/
- JVM与GC
- 获取Tomcat的Java PID后:jstat -gcutil 1000(每秒刷新GC与内存使用)
- 日志与实时观测
- tail -f $CATALINA_HOME/logs/catalina.out
- top/htop/vmstat/free/iostat/netstat/dstat/iftop 观察系统资源与网络
- 一键自愈脚本思路(示例)
- 每分钟检测进程;若进程不存在则启动并记录日志;可扩展为接口探活失败则重启并告警(邮件/企业微信/钉钉)。
四 可视化与告警
- Prometheus + Grafana
- Grafana 导入 Tomcat/JVM 仪表盘(如 8563 等社区模板),展示线程池、请求吞吐、响应时间、GC与内存趋势
- 在 Grafana 配置阈值告警,联动通知渠道(邮件、Webhook)
- Zabbix
- 通过 JMX 或 Exporter 采集指标,配置触发器与动作(短信/企业微信/钉钉)
- 日志与APM
- 结合 ELK 收集 catalina.out 与业务日志,或用 APM(如 SkyWalking)增强调用链与慢事务分析
五 关键指标与阈值建议
| 维度 |
关键指标 |
建议阈值或关注点 |
| Tomcat线程池 |
currentThreadsBusy / maxThreads |
繁忙比例持续 > 0.8 需扩容或优化 |
| 请求吞吐与耗时 |
requestCount、processingTime |
5xx 突增、P95/P99 上升需排查 |
| JVM内存 |
Old Gen 使用率、Metaspace |
Old Gen > 80–85% 或频繁 Full GC |
| GC |
GC次数与停顿 |
Full GC 频繁或单次停顿过长 |
| 会话 |
activeSessions、rejectedSessions |
会话泄漏或拒绝会话增多 |
| 连接池 |
activeCount / maxActive |
活跃连接长期接近上限需调优 |
| 系统资源 |
CPU、Load、IO、TCP重传 |
Load 持续高于 CPU 核数、重传率高需排查网络/存储瓶颈 |
以上方案可按规模分阶段落地:先完成“系统自检 + JMX Exporter + Prometheus/Grafana 可视化”,再补充“自愈脚本与告警”,最后接入日志与APM形成闭环。