温馨提示×

centos里tomcat如何监控

小樊
38
2026-01-10 07:33:06
栏目: 智能运维

CentOS 上 Tomcat 监控实操指南

一 基础运行与可用性检查

  • 使用 systemd 管理服务与状态
    • 查看状态:systemctl status tomcat.service
    • 启动/停止/重启:systemctl start|stop|restart tomcat.service
    • 开机自启:systemctl enable tomcat.service
  • 进程与端口快速核验
    • 进程:ps -ef | grep tomcat
    • 端口(示例):ss -lntp | grep 8080
  • 应用可用性探测
    • HTTP 探测:curl -I -m 10 -o /dev/null -s -w “%{http_code}” http://localhost:8080/(返回 200 为正常)
  • 访问日志自带响应时间
    • conf/server.xml 的 Host 内启用 AccessLogValve,并使用模式包含 %D(处理时间,单位微秒),便于定位慢请求与错误率。

二 JVM 与线程的命令行监控

  • 基础定位
    • 列出 Java 进程:jps -v
  • 内存与 GC
    • 实时 GC/内存:jstat -gc -gccause 2000(每 2000ms 采样一次)
  • 线程与死锁排查
    • 线程快照:jstack -l > threaddump.txt
    • 建议在不同时间点采集 3 次,便于复现与对比
  • 堆内存分析
    • 生成堆转储:jmap -dump:format=b,file=heap.hprof (分析建议使用 Eclipse MAT
  • 远程图形化(临时排障)
    • jconsole / jvisualvm 可查看 内存、线程、类加载、MBeans 等;远程时需在 Tomcat 启动参数中开启 JMX(见下一节)。

三 JMX 远程监控与 Prometheus 指标采集

  • 启用 JMX(两种常见方式)
    • 方式 A(JVM 参数,简单通用)
      • bin/catalina.shJAVA_OPTSCATALINA_OPTS 中加入:
        • -Dcom.sun.management.jmxremote
        • -Dcom.sun.management.jmxremote.port=1090
        • -Dcom.sun.management.jmxremote.rmi.port=1090
        • -Dcom.sun.management.jmxremote.authenticate=false
        • -Dcom.sun.management.jmxremote.ssl=false
        • -Djava.rmi.server.hostname=<服务器IP>
      • 连接示例:service:jmx:rmi:///jndi/rmi://:1090/jmxrmi
    • 方式 B(Tomcat 监听器,更规范)
      • conf/server.xml 的 Server 内添加:
  • Prometheus + JMX Exporter
    • 部署:将 jmx_prometheus_javaagent-.jar 放到 $CATALINA_HOME/lib,创建 jmx-exporter.yaml
    • 启动参数示例:
      • -javaagent:/path/to/jmx_prometheus_javaagent-0.13.0.jar=20000:/path/to/jmx-exporter.yaml
    • Prometheus 抓取:在 prometheus.yml 增加 job
      • scrape_configs:
        • job_name: ‘tomcat’ static_configs:
          • targets: [‘:20000’]
    • 可视化:在 Grafana 导入 Tomcat 仪表盘(如 ID:8563)。

四 进程守护与自动恢复

  • systemd 自恢复(推荐)
    • 确保 tomcat.service 配置了 Restart=on-failure,异常退出会被 systemd 自动拉起
  • Shell 脚本 + Cron 兜底
    • 思路:检测进程是否存在;探测 HTTP 200;异常则 kill 旧进程并 startup.sh 重启;记录日志
    • 示例关键片段:
      • 进程:TomcatID=$(ps -ef | grep tomcat | grep -w ‘apache-tomcat-8.5.35’ | grep -v grep | awk ‘{print $2}’ | head -n1’)
      • 探测:code=$(curl -s -o /dev/null -m 10 --connect-timeout 10 http://localhost:8080/ -w “%{http_code}”)
      • 重启:[ $code -ne 200 ] && kill -9 $TomcatID && sleep 5 && /path/to/startup.sh
      • 定时:*/1 * * * * /path/to/monitor.sh
    • 重要提示:若脚本启动失败提示未定义 JAVA_HOME/JRE_HOME,在 bin/setclasspath.sh 顶部显式导出:
      • export JAVA_HOME=/usr/local/java/jdk1.8.0_152
      • export JRE_HOME=${JAVA_HOME}/jre
    • 安全建议:避免频繁 kill -9,可先尝试 graceful 停止;清理 work/ 需谨慎,可能影响正在处理请求。

五 关键指标与告警阈值建议

维度 关键指标 建议阈值 说明
线程池 当前活跃线程 / 最大线程 75% / 90% 超过 90% 易出现排队与超时
请求 平均响应时间、错误率 >1s>5% 结合业务 SLA 调整
JVM 堆/非堆使用率、GC 暂停 80%/85%200ms/500ms 长时间 GC 需排查内存或对象生命周期
会话 活跃会话数 视应用而定 结合业务容量规划
连接 当前连接数、等待队列 80%/90%>50/>100 队列过长需扩容或优化慢查询
  • 告警示例(Prometheus + Alertmanager)
    • 高响应时间:
      • expr: tomcat_request_seconds_sum / tomcat_request_seconds_count > 1
      • for: 5m
      • labels.severity: warning
    • 说明:阈值与持续时间请结合业务压测与历史基线微调。

0