CentOS 环境下 Tomcat 监控实践
一 基础运行与日志检查
systemctl status tomcat.service;启动 systemctl start tomcat.service;重启 systemctl restart tomcat.service;设置开机自启 systemctl enable tomcat.service。适用于 CentOS 7+。ps -ef | grep tomcat 或 ps -ef | grep java | grep tomcat 获取 PID。top/htop 实时查看 CPU/内存;vmstat、free、iostat、netstat/ss、dstat、iftop 辅助排查系统瓶颈。catalina.out(主日志)、localhost*.log(应用日志)。常用 tail -f catalina.out 实时跟踪。jstat -gcutil <PID> 1000(每 1s 刷新一次 GC/内存统计)。jmap 生成堆转储,jcmd 发送诊断命令;配合 VisualVM/JConsole 做可视化分析。二 JVM 与远程可视化监控
bin/catalina.sh 的 JAVA_OPTS 增加:
-Djava.rmi.server.hostname=<服务器IP>-Dcom.sun.management.jmxremote.port=1090-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=falsejconsole <IP>:1090 连接。server.xml 的 <Server> 内添加:
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" useLocalPorts="true" />三 指标采集与可视化方案
jmx_prometheus_javaagent-<version>.jar 至 $CATALINA_HOME/lib,在 catalina.sh 添加:
JAVA_OPTS="$JAVA_OPTS -javaagent:/path/jmx_prometheus_javaagent-<version>.jar=9010:/path/jmx-exporter.yaml"jmx-exporter.yaml(可按需采集 GlobalRequestProcessor、ThreadPool、Manager 等指标),重启 Tomcat。http://<host>:9010/jmx 查看指标;Prometheus 抓取 :9010/metrics,Grafana 导入 Tomcat 仪表盘 进行可视化与告警。web.xml 注册 MonitoringFilter,访问 http://<host>:8080/monitoring 查看 请求统计、JVM、SQL 等。probe.war 放入 webapps 即可监控 线程、会话、JVM 等(适合快速接入)。四 进程自愈与可用性监控
ps 获取 PID;用 curl -m 10 -w "%{http_code}" <health-url> 校验业务接口;进程不存在或接口非 200 时执行 startup.sh 重启,并记录日志。[program:tomcat] 实现自动拉起与状态监控,适合无 systemd 或容器化前置场景。五 关键告警阈值与排障要点
jstat 观察 FGC 频繁/Full GC 时间过长 → 触发堆转储并分析。Catalina ThreadPool 的 currentThreadsBusy 长期接近 maxThreads → 扩容或优化慢请求。Manager 的 rejectedSessions 增长 → 检查 session 超时 与 并发上限。CPU>80%、可用内存低、`磁盘空间不足** → 横向扩容或清理。jstat -gcutil <PID> 1000 观察 Eden/Survivor/Old 与 YGC/FGC 趋势。jmap 生成堆转储,用 Eclipse MAT 分析泄漏对象。