如何通过Tomcat在CentOS上轻松实现系统性能的实时监控与全面掌握?

更新于
2026-09-29 17:56:57
3阅读来源:SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

在 CentOS 环境中部署 Tomcat 后很多运维人员会遇到以下痛点:

  • 无法实时看到 CPU、内存、GC 等关键指标,导致性能瓶颈难还有时定位。
  • 传统日志查看方式只能看到错误信息,却无法快速获得整体运行状态。
  • 手动配置 JMX 或第三方插件成本高,易出现安全或性能泄漏。
  • 缺少统一的可视化仪表盘,导致多台服务器间的比较和报警管理繁琐。

下面给出一套从基础到进阶、从命令行到可视化全覆盖的方案,帮助你在 CentOS 上比较容易做到 Tomcat 的实时监控与基本掌握。老实说,

如何通过Tomcat在CentOS上轻松实现系统性能的实时监控与全面掌握?

一、先把基础监控搞定

1️⃣ 使用 systemd 管理 Tomcat

# 启动后查看服务状态
sudo systemctl status tomcat9 # 或者你的服务名 tomcat7/8/9
# 实时跟踪日志
sudo journalctl -u tomcat9 -f

通过 systemctl status 可以快速得到启动时间、运行状态和最近的错误摘要;journalctl -f 则可以实时查看服务日志,避免手动切换到 /opt/tomcat/logs/catalina.out。

2️⃣ 开启 JMX 远程访问

务必在生产环境开启安全认证与 SSL,否则任何人都能访问你的 JVM 内部信息!

# 编辑 bin/catalina.sh 添加如下参数
export CATALINA_OPTS="$CATALINA_OPTS \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9999 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.aunticate=true \
-Dcom.sun.management.jmxremote.password.file=/opt/tomcat/conf/jmxremote.password \
-Dcom.sun.management.jmxremote.access.file=/opt/tomcat/conf/jmxremote.access"

密码文件示例:/opt/tomcat/conf/jmxremote.password

# username password
admin myStrongPassword123!
# username access_level
admin readwrite

使用 JConsole / VisualVM 查看指标

  • JConsole: 执行 /usr/lib/jvm/java-*-openjdk/bin/jconsole。输入 :9999,登录后即可查看线程数、GC 次数、内存使用等。
  • VisualVM: 一样支持连接远程 JVM,并提供更丰富的插件程序。可安装 "JDK Mission Control",在 “Application” 页面直接看到 Tomcat 的 JVM 指标。
  • 注意: 不要在高并发生产环境直接开启 SSL off。除非你有额外防火墙或 VPN 层保护,否则会产生网络延迟。

3️⃣ 简单脚本化监控

利用 /usr/bin/top -b -n1 | grep java | awk '{print $10}' ,定时输出 CPU 占比;利用 dstat -cmt --output /tmp/dstat.csv>/dev/null &,定期导出磁盘 I/O 数据。结合 cron 可实现每分钟一次的数据采集,再用简单的 Grafana 单图展示即可。

二、高级组合:Promeus + Grafana + JMX Exporter + ELK Stack

A) Promeus + Grafana(最流行的时间序列监控)

安装 Promeus 与 jmx_exporter

  1. Edit `server.xml`:`` 添加 `JMX` 参数同上步骤。接下来在 `catalina.sh` 加入:

CATALINAOPTS="$CATALINAOPTS \
-Djava.security.auth.login.config=/opt/tomcat/conf/jaas.conf \
-javaagent:/opt/promeus-jmx-exporter.jar=9090:/opt/jmx_exporter.yml"

  • $ sudo yum install promeus grafana -y。• 在 /etc/promeus/promeus.yml 增加 scrape 配置:
  • - jobname: 'tomcat'
    staticconfigs:
    - targets: # jmx_exporter listening port
    

    • "job_name": 自定义名称;"targets": 指向 jvm agent 所监听端口。说起来,"metrics_path": 默认 `/metrics`;若你改了方法请同步更新,"relabel_configs": 可用于过滤掉不需要的 MBean。"scrape_interval": 每隔 N 秒抓取一次可根据业务负载调节。不过,重启 Promeus 服务:sudo systemctl restart promeus.service 启动 Grafana 并登录默认地址 http://localhost:3000。说到添加数据源,Promeus URL:http://localhost:9090 并保存。导入官方 Tomcat Dashboard: Dashboard ID → “Import”。粘贴 ID → 导入,即可直观看到 CPU、Memory、ThreadPool、GC 等指标。**痛点解决**:所有指标集中统一展示,告警规则可在 Grafana 内设置。例如 “CPU>90%” 或 “Request latency>500ms”。---

      B) ELK Stack

      • Easticsearch: 收集索引;Kibana: 可视化查询;Logstash: 将 Tomcat 日志转为 JSON 后推送至 ES。步骤简述这方面,

      bash

      docker run --name elasticsearch -e "discovery.type=single-node" -d docker.elastic.co/elasticsearch/elasticsearch:8.x docker run --name logstash --link elasticsearch eslogstash docker run --name kibana --link elasticsearch kibana

      input { file { path => "/opt/tomcat/logs/*.out" type => "tomcat" } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } date { match => } } output { elasticsearch { hosts => index => "tomcat-%{+YYYY.MM.dd}" } }

      • 在 Kibana 中创建“Tomcat Logs”仪表盘。即时看到请求量峰值、异常比例等信息。

      痛点解决将原始文本日志变成结构化数据,一键搜索特定错误码或 IP。


      C) 自定义 Shell 脚本自动化报警

      PID=$ if; n echo "$: Tomcat not running!">> /var/log/tomcat_monitor.log;exit 1,fi

      CPU=$ MEM=$

      if ));n echo "$: High CPU $CPU%">> /var/log/tomcatmonitor.log;fi if )),n echo "$: High Memory $MEM%">> /var/log/tomcatmonitor.log;fi

      • 将此脚本放入 /usr/local/bin/check_tomca…,老实说,设置 crontab */5 * * * * root /usr/local/bin/check_tomca… 即可每五分钟检测一次。


      三、常见问题排查与常用方法

      常见症状与处理方法   
      Tomcat 无法启动或频繁重启?
      • MBean 或 jvm 参数冲突导致 OutOfMemoryError;检查 Java 堆大小设置。老实说,
      • 端口占用冲突;确认 HTTP Connector 与 JMX Listener 未重叠。
    • - 检查 /var/log/messages 与 catalina.out 是否有堆栈信息。
    Promeus 报告“no data for target”?
    • = 确认 jvm agent 正确监听了 port=9090 且无防火墙拦截。话说回来,
    • = 检查 promeus.yml 中 targets 是否指向正确 IP 与端口。而且 file 权限允许读取配置文件。
    Grafana 仪表盘显示空白?
    • = 数据源未正确配置或 URL 错误,请在 Data Sources 中测试连接。按理说,
    • = 在 Dashboard import 时选择“Overwrite existing dashboards”。确保不会因旧版 ID 冲突导致卡死。
    *以上排查步骤均已在 Docker Compose 示例中演示,可直接复制粘贴实验验证。

    四、小结 & 常用方法建议

    • ⚡️ 分层监控基本命令行 + 程序日志 → JMX + Grafana → ELK + 日志分析 → 自动报警脚本。层层递进保证既能即时感知,又能根因。
      🔹 每个层次都要留一个落地仪表盘,用于日常巡检与异常快速定位。🔹 避免“一刀切”:如某个业务场景不需要 GC 指标。就不要强制收集,以降低资源开销。🔹 安全第一所有远程访问都建议配合 SSH 隧道或 VPN。而且开启认证机制,否则容易被攻击者滥用。

    如何通过Tomcat在CentOS上轻松实现系统性能的实时监控与全面掌握?

    阶段推荐工具组合:

    阶段 工具
    本地开发 IntelliJ IDEA + Embedded TomCat + VisualVM
    部署前测试 Docker Compose – 同步代码变更后即刻预览
    正式运维 Promeus + Grafana + Alertmanager ELK Stack 自研 Shell 脚本

    上线后继续改进:

    1. 指标回溯 – 利用 Grafana 的“Time range”功能追溯历史波动,与业务上线记录做对应对比。
    2. 容量规划 – 根据历史数据估算磁盘 I/O 与内存峰值,为未来扩容制定预算。
    3. 自动缩容策略 – 当 CPU 连续低于30% 且请求量下降时可通过 API 调整实例数量。

    这篇文章基于 CentOS 8+ 环境编写。若使用 RHEL 或 Alpine,请相应调整包名和方法配置 ✨祝你顺利实现实时监控,让程序性能永远处于最佳状态!✨ 🖥️ https://your-monitoring-guide.example.com/ 📝 作者:SysOps 团队 ©2026 " />

    标签:CentOS

    在 CentOS 环境中部署 Tomcat 后很多运维人员会遇到以下痛点:

    • 无法实时看到 CPU、内存、GC 等关键指标,导致性能瓶颈难还有时定位。
    • 传统日志查看方式只能看到错误信息,却无法快速获得整体运行状态。
    • 手动配置 JMX 或第三方插件成本高,易出现安全或性能泄漏。
    • 缺少统一的可视化仪表盘,导致多台服务器间的比较和报警管理繁琐。

    下面给出一套从基础到进阶、从命令行到可视化全覆盖的方案,帮助你在 CentOS 上比较容易做到 Tomcat 的实时监控与基本掌握。老实说,

    如何通过Tomcat在CentOS上轻松实现系统性能的实时监控与全面掌握?

    一、先把基础监控搞定

    1️⃣ 使用 systemd 管理 Tomcat

    # 启动后查看服务状态
    sudo systemctl status tomcat9 # 或者你的服务名 tomcat7/8/9
    # 实时跟踪日志
    sudo journalctl -u tomcat9 -f
    

    通过 systemctl status 可以快速得到启动时间、运行状态和最近的错误摘要;journalctl -f 则可以实时查看服务日志,避免手动切换到 /opt/tomcat/logs/catalina.out。

    2️⃣ 开启 JMX 远程访问

    务必在生产环境开启安全认证与 SSL,否则任何人都能访问你的 JVM 内部信息!

    # 编辑 bin/catalina.sh 添加如下参数
    export CATALINA_OPTS="$CATALINA_OPTS \
    -Dcom.sun.management.jmxremote \
    -Dcom.sun.management.jmxremote.port=9999 \
    -Dcom.sun.management.jmxremote.ssl=false \
    -Dcom.sun.management.jmxremote.aunticate=true \
    -Dcom.sun.management.jmxremote.password.file=/opt/tomcat/conf/jmxremote.password \
    -Dcom.sun.management.jmxremote.access.file=/opt/tomcat/conf/jmxremote.access"
    

    密码文件示例:/opt/tomcat/conf/jmxremote.password

    # username password
    admin myStrongPassword123!
    # username access_level
    admin readwrite
    

    使用 JConsole / VisualVM 查看指标

    • JConsole: 执行 /usr/lib/jvm/java-*-openjdk/bin/jconsole。输入 :9999,登录后即可查看线程数、GC 次数、内存使用等。
    • VisualVM: 一样支持连接远程 JVM,并提供更丰富的插件程序。可安装 "JDK Mission Control",在 “Application” 页面直接看到 Tomcat 的 JVM 指标。
    • 注意: 不要在高并发生产环境直接开启 SSL off。除非你有额外防火墙或 VPN 层保护,否则会产生网络延迟。

    3️⃣ 简单脚本化监控

    利用 /usr/bin/top -b -n1 | grep java | awk '{print $10}' ,定时输出 CPU 占比;利用 dstat -cmt --output /tmp/dstat.csv>/dev/null &,定期导出磁盘 I/O 数据。结合 cron 可实现每分钟一次的数据采集,再用简单的 Grafana 单图展示即可。

    二、高级组合:Promeus + Grafana + JMX Exporter + ELK Stack

    A) Promeus + Grafana(最流行的时间序列监控)

    安装 Promeus 与 jmx_exporter

    1. Edit `server.xml`:`` 添加 `JMX` 参数同上步骤。接下来在 `catalina.sh` 加入:

    CATALINAOPTS="$CATALINAOPTS \
    -Djava.security.auth.login.config=/opt/tomcat/conf/jaas.conf \
    -javaagent:/opt/promeus-jmx-exporter.jar=9090:/opt/jmx_exporter.yml"
    

  • $ sudo yum install promeus grafana -y。• 在 /etc/promeus/promeus.yml 增加 scrape 配置:
  • - jobname: 'tomcat'
    staticconfigs:
    - targets: # jmx_exporter listening port
    

    • "job_name": 自定义名称;"targets": 指向 jvm agent 所监听端口。说起来,"metrics_path": 默认 `/metrics`;若你改了方法请同步更新,"relabel_configs": 可用于过滤掉不需要的 MBean。"scrape_interval": 每隔 N 秒抓取一次可根据业务负载调节。不过,重启 Promeus 服务:sudo systemctl restart promeus.service 启动 Grafana 并登录默认地址 http://localhost:3000。说到添加数据源,Promeus URL:http://localhost:9090 并保存。导入官方 Tomcat Dashboard: Dashboard ID → “Import”。粘贴 ID → 导入,即可直观看到 CPU、Memory、ThreadPool、GC 等指标。**痛点解决**:所有指标集中统一展示,告警规则可在 Grafana 内设置。例如 “CPU>90%” 或 “Request latency>500ms”。---

      B) ELK Stack

      • Easticsearch: 收集索引;Kibana: 可视化查询;Logstash: 将 Tomcat 日志转为 JSON 后推送至 ES。步骤简述这方面,

      bash

      docker run --name elasticsearch -e "discovery.type=single-node" -d docker.elastic.co/elasticsearch/elasticsearch:8.x docker run --name logstash --link elasticsearch eslogstash docker run --name kibana --link elasticsearch kibana

      input { file { path => "/opt/tomcat/logs/*.out" type => "tomcat" } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } date { match => } } output { elasticsearch { hosts => index => "tomcat-%{+YYYY.MM.dd}" } }

      • 在 Kibana 中创建“Tomcat Logs”仪表盘。即时看到请求量峰值、异常比例等信息。

      痛点解决将原始文本日志变成结构化数据,一键搜索特定错误码或 IP。


      C) 自定义 Shell 脚本自动化报警

      PID=$ if; n echo "$: Tomcat not running!">> /var/log/tomcat_monitor.log;exit 1,fi

      CPU=$ MEM=$

      if ));n echo "$: High CPU $CPU%">> /var/log/tomcatmonitor.log;fi if )),n echo "$: High Memory $MEM%">> /var/log/tomcatmonitor.log;fi

      • 将此脚本放入 /usr/local/bin/check_tomca…,老实说,设置 crontab */5 * * * * root /usr/local/bin/check_tomca… 即可每五分钟检测一次。


      三、常见问题排查与常用方法

      常见症状与处理方法   
      Tomcat 无法启动或频繁重启?
      • MBean 或 jvm 参数冲突导致 OutOfMemoryError;检查 Java 堆大小设置。老实说,
      • 端口占用冲突;确认 HTTP Connector 与 JMX Listener 未重叠。
    • - 检查 /var/log/messages 与 catalina.out 是否有堆栈信息。
    Promeus 报告“no data for target”?
    • = 确认 jvm agent 正确监听了 port=9090 且无防火墙拦截。话说回来,
    • = 检查 promeus.yml 中 targets 是否指向正确 IP 与端口。而且 file 权限允许读取配置文件。
    Grafana 仪表盘显示空白?
    • = 数据源未正确配置或 URL 错误,请在 Data Sources 中测试连接。按理说,
    • = 在 Dashboard import 时选择“Overwrite existing dashboards”。确保不会因旧版 ID 冲突导致卡死。
    *以上排查步骤均已在 Docker Compose 示例中演示,可直接复制粘贴实验验证。

    四、小结 & 常用方法建议

    • ⚡️ 分层监控基本命令行 + 程序日志 → JMX + Grafana → ELK + 日志分析 → 自动报警脚本。层层递进保证既能即时感知,又能根因。
      🔹 每个层次都要留一个落地仪表盘,用于日常巡检与异常快速定位。🔹 避免“一刀切”:如某个业务场景不需要 GC 指标。就不要强制收集,以降低资源开销。🔹 安全第一所有远程访问都建议配合 SSH 隧道或 VPN。而且开启认证机制,否则容易被攻击者滥用。

    如何通过Tomcat在CentOS上轻松实现系统性能的实时监控与全面掌握?

    阶段推荐工具组合:

    阶段 工具
    本地开发 IntelliJ IDEA + Embedded TomCat + VisualVM
    部署前测试 Docker Compose – 同步代码变更后即刻预览
    正式运维 Promeus + Grafana + Alertmanager ELK Stack 自研 Shell 脚本

    上线后继续改进:

    1. 指标回溯 – 利用 Grafana 的“Time range”功能追溯历史波动,与业务上线记录做对应对比。
    2. 容量规划 – 根据历史数据估算磁盘 I/O 与内存峰值,为未来扩容制定预算。
    3. 自动缩容策略 – 当 CPU 连续低于30% 且请求量下降时可通过 API 调整实例数量。

    这篇文章基于 CentOS 8+ 环境编写。若使用 RHEL 或 Alpine,请相应调整包名和方法配置 ✨祝你顺利实现实时监控,让程序性能永远处于最佳状态!✨ 🖥️ https://your-monitoring-guide.example.com/ 📝 作者:SysOps 团队 ©2026 " />

    标签:CentOS