CentOS 下的 Java 监控工具全景
在 CentOS 环境中,Java 应用的监控通常分为 JVM 层、应用层 与 系统层 三个维度。下面按用途梳理常用工具与典型用法,便于快速选型与落地。
工具分类与用途
| 工具 |
类型 |
主要用途 |
典型场景 |
| jps |
JVM 自带 |
列出本机所有 Java 进程 PID |
快速定位目标进程 |
| jstat |
JVM 自带 |
监控 GC、内存、类加载、JIT 等统计 |
观察 GC 频率与内存各区使用 |
| jinfo |
JVM 自带 |
查看/动态修改 JVM 参数 |
核对与调整运行时参数 |
| jstack |
JVM 自带 |
打印 线程栈,定位 死锁/阻塞 |
线程争用、卡死排查 |
| jmap |
JVM 自带 |
生成 堆转储,分析内存泄漏 |
内存泄漏定位、对象分布 |
| JConsole |
可视化 |
图形化查看 内存、线程、类、CPU |
本地/远程连接诊断 |
| VisualVM |
可视化 |
性能监测、线程分析、内存泄漏检查 |
深度排查与采样 |
| JMX |
管理与监控 |
远程采集 MBean 指标与操作 |
对接监控平台、脚本化采集 |
| Prometheus + JMX Exporter |
指标平台 |
将 JVM/JMX 指标转为 Prometheus 格式 |
长期存储与告警 |
| Grafana |
可视化 |
构建 监控大盘 与告警面板 |
可视化展示与运维看板 |
| Micrometer + Spring Boot Actuator |
应用指标 |
暴露 /actuator/prometheus 端点 |
Spring Boot 应用快速接入 |
| SkyWalking |
APM/分布式追踪 |
调用链追踪、性能剖析 |
微服务链路与性能瓶颈 |
| MyPerf4J |
APM |
高性能、低开销 的 Java 性能监控 |
生产环境低侵入监控 |
| New Relic / AppDynamics |
商业 APM |
响应时间、吞吐量、错误率 等全链路 |
企业级可观测性 |
| dstat / nmon |
系统监控 |
CPU、内存、磁盘、网络 资源监控 |
关联瓶颈定位(系统层) |
| crontab + 脚本 |
运维自动化 |
存活检测、异常重启/告警 |
稳定性保障与自愈 |
| 以上工具覆盖了 JVM 诊断、指标采集与可视化、APM 追踪 与 系统资源监控 的完整链路,可按需组合使用。 |
|
|
|
快速上手步骤
- 定位进程:使用 jps -l 获取目标 PID,便于后续命令使用。
- 观察 GC 与内存:执行 jstat -gcutil 1000 10(每 1s 一次,共 10 次),关注 S0U/S1U/EC/EU/OC/OU/MC/MU 与 YGC/YGCT/FGC/FGCT/GCT 等关键列。
- 线程与死锁:用 jstack 抓取线程栈,分析 BLOCKED/WAITING 与锁竞争。
- 内存泄漏定位:执行 jmap -dump:live,format=b,file=heap.hprof 生成 堆转储,再用 Eclipse MAT 分析。
- 远程可视化:启用 JMX(示例参数见下节),通过 JConsole/VisualVM 远程连接查看 内存、线程、类、CPU 等。
- 指标化与告警:部署 JMX Exporter 暴露 JVM 指标,Prometheus 拉取并存储,Grafana 配置大盘与告警规则。
- Spring Boot 应用:引入 Micrometer 与 Actuator,暴露 /actuator/prometheus,由 Prometheus 采集、Grafana 展示。
- 分布式追踪:在微服务中接入 SkyWalking,获取 调用链 与 性能剖析 数据。
以上步骤覆盖了从 快速诊断 到 长期观测 的常用路径,适合大多数 CentOS + Java 场景。
关键配置示例
- 启用 JMX(远程)
在启动参数中加入:
java -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9010 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-jar yourapp.jar
说明:生产环境建议开启 认证 与 SSL,并限制来源 IP。
- Prometheus 抓取 Spring Boot 应用
在 prometheus.yml 中添加作业:
scrape_configs:
- job_name: ‘java-app’
metrics_path: ‘/actuator/prometheus’
static_configs:
- targets: [‘localhost:8080’]
应用侧引入 Micrometer 依赖并启用 Actuator 的 prometheus 端点。
- 常用 jstat 命令
jstat -gcutil 1000 10(每 1s 采样一次,共 10 次),用于观察 GC 与 内存分区 使用变化。
以上配置可直接用于 远程 JMX 诊断 与 指标化接入 的常见场景。
告警与可视化实践
- 指标与面板:以 Prometheus 作为时序存储,围绕 JVM(内存/GC/线程)、应用(QPS/延迟/错误)、系统(CPU/内存/IO/网络) 建立指标与 Grafana 面板,设置阈值告警(如 FGC 频繁、线程池满、HTTP 5xx 激增)。
- 链路追踪:在微服务架构中引入 SkyWalking,将 调用链、慢调用、异常 与 业务拓扑 纳入统一观测,便于定位跨服务瓶颈。
- 系统层关联:使用 dstat/nmon 观察 CPU steal、磁盘 await、网络丢包 等系统指标,辅助判断 资源瓶颈 是否来自 JVM 之外。
- 稳定性保障:通过 crontab + 脚本 做 进程存活检测 与 异常重启/告警,作为平台告警的补充防线。
上述实践可形成从 指标 到 链路 再到 系统 的闭环观测与告警体系。