温馨提示×

如何监控Ubuntu Tomcat性能指标

小樊
31
2025-12-19 22:28:13
栏目: 智能运维

Ubuntu 上监控 Tomcat 性能的可落地方案


一 监控体系与核心指标

  • 建议采用分层监控:系统层(CPU、内存、磁盘 I/O、网络)、Tomcat 层(线程池、连接器、会话、访问日志)、JVM 层(堆与非堆、GC 次数/时间)、应用层(错误率、慢请求、依赖调用)。
  • 关键指标与建议阈值如下(用于告警与容量规划):
指标类别 关键指标 建议阈值
服务器 CPU 使用率 警戒线 80%,紧急线 90%
服务器 内存使用率 警戒线 85%,紧急线 90%
服务器 磁盘 I/O 延迟 读写延迟 < 20ms
Tomcat 线程池 当前活跃线程数 达到 maxThreads 的 75% 预警,90% 紧急
Tomcat 连接器 等待队列大小 预警 50,紧急 100
Tomcat 请求 平均响应时间 预警 500ms,紧急 1000ms
Tomcat 请求 错误率 预警 1%,紧急 5%
JVM 内存 堆/非堆使用率 80%/90%,非堆 85%/95%
JVM GC GC 暂停时间 预警 200ms,紧急 500ms
  • 常用 MBean(通过 JMX 获取):
    • 线程池:Catalina:type=ThreadPool,name=http-nio-8080(属性:currentThreadCount、maxThreads、currentThreadsBusy)
    • 请求处理器:Catalina:type=GlobalRequestProcessor,name=http-nio-8080(属性:requestCount、errorCount)
    • 会话:Catalina:type=Manager,context=/your-app,host=localhost(属性:activeSessions)

二 快速上手 JMX 与可视化工具

  • 启用 JMX(推荐在 conf/server.xml 添加监听器,更规范):

    • 内添加:
      <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
                rmiRegistryPortPlatform="10001"
                rmiServerPortPlatform="10002"
                useLocalPorts="true" />
      
    • 在 setenv.sh/catalina.sh 中补充 JVM 参数(示例为本地测试,生产请开启鉴权与 SSL):
      CATALINA_OPTS="$CATALINA_OPTS \
        -Dcom.sun.management.jmxremote \
        -Dcom.sun.management.jmxremote.port=10001 \
        -Dcom.sun.management.jmxremote.rmi.port=10002 \
        -Djava.rmi.server.hostname=<服务器公网或内网IP> \
        -Dcom.sun.management.jmxremote.authenticate=false \
        -Dcom.sun.management.jmxremote.ssl=false"
      
    • 重启 Tomcat 后,使用 JConsole/VisualVM 通过 service:jmx:rmi:///jndi/rmi://:10001/jmxrmi 连接。
  • 远程可视化连接要点:

    • 使用 JConsole(JDK 自带)或 VisualVM(可装插件)连接上述 JMX 地址,查看 CPU、堆、线程、类、MBeans 等。
    • 若 VisualVM 通过 jstatd 发现看不到 CPU,改用 JMX 方式获取更完整的 Tomcat 与 JVM 指标。

三 访问日志与日志分析

  • 开启并增强访问日志(记录响应时间与 UA,便于定位慢请求与异常来源):
    • 在 server.xml 的 内添加或修改:
      <Valve className="org.apache.catalina.valves.AccessLogValve"
             directory="logs"
             prefix="localhost_access_log"
             suffix=".txt"
             pattern="%h %l %u %t "%r" %s %b %D "%{User-Agent}i"" />
      
      • 关键字段:%D(处理时间,微秒)、%s(状态码)、%b(字节数)、%r(请求行)。
  • 实时查看与检索:
    • 实时查看:tail -f /var/log/tomcat/catalina.out*
    • 错误检索:grep -i “ERROR” /var/log/tomcat/catalina.out*
    • 访问日志分析:grep " 500 " /var/log/tomcat/localhost_access_log.txt**
  • 集中化日志平台(可选):
    • 使用 ELK(Elasticsearch+Logstash+Kibana)Greylog 收集 catalina.out 与 access_log,构建可视化与告警。

四 Prometheus Grafana 与告警

  • 方案 A(推荐):应用埋点或 Tomcat Exporter 暴露 /metrics,Prometheus 抓取,Grafana 展示。
    • 在应用中注册 Prometheus Servlet(Spring Boot 可引入 actuator/prometheus),或部署 JMX Exporter 将 JMX 转为指标。
    • Prometheus 抓取示例:
      scrape_configs:
        - job_name: 'tomcat'
          metrics_path: '/metrics'
          static_configs:
            - targets: ['<TOMCAT_IP>:8080']
      
    • Grafana 导入 Tomcat 仪表盘(如 ID:8563),配置阈值与变量(实例、应用名)。
  • 方案 B:使用 JavaMelody 快速获得页面级监控(/monitoring),适合无侵入快速接入。
  • 告警示例(Prometheus + Alertmanager):当平均响应时间超过 1s 持续 5 分钟 触发:
    groups:
    - name: tomcat_alerts
      rules:
      - alert: HighResponseTime
        expr: tomcat_request_seconds_sum / tomcat_request_seconds_count > 1
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Tomcat高响应时间告警"
          description: "平均响应时间超过1秒,当前值: {{ $value | humanizeDuration }}"
    
  • 建议同时监控:JVM 堆/非堆、GC 暂停、线程池使用率、活跃会话数、错误率与慢请求数。

五 命令行与脚本巡检

  • 进程与资源:
    • 查进程:ps -ef | grep tomcat
    • 资源占用:top -p ;或 cat /proc//status
    • 端口监听:ss -lntp | grep 8080(或 netstat -na | grep 8080)
  • JVM 诊断(需 JDK):
    • GC/类加载:jstat -gc 1s
    • 堆转储:jmap -dump:format=b,file=heap.hprof
    • 诊断命令:jcmd VM.version / GC.run_finalization
  • 一键健康检查脚本思路(示例要点):
    • 检查端口 8080 是否 LISTEN
    • 访问 /health/monitoring(JavaMelody)返回 200
    • 解析 access_log 最近 1 分钟5xx 数量与 P95/P99 响应时间
    • 阈值判断与告警(邮件/企业微信/钉钉 Webhook)

0