温馨提示×

CentOS如何监控Java应用状态

小樊
37
2025-11-19 20:13:59
栏目: 编程语言

CentOS 监控 Java 应用的可落地方案

一 快速巡检与 JVM 自带工具

  • 进程与基础信息
    • 查看 Java 进程:jps -vps -ef | grep java,获取 PID 与启动参数。
    • 资源占用:top -p 实时查看 CPU/内存;必要时配合 vmstat 1iostat -x 1 观察系统层面瓶颈。
  • JVM 运行时诊断
    • GC 与内存:jstat -gcutil <间隔秒> <次数>,关注 YGC/YGCT、FGC/FGCT、GCT 与各区使用率。
    • 线程与锁:jstack 抓取线程栈,排查 死锁/阻塞/长时间运行线程
    • 堆与对象:jmap -heap 查看堆配置与使用;jmap -dump:format=b,file=heap.hprof 导出快照(注意可能 STW,生产慎用)。
    • 运行参数:jinfo 查看/调整部分 JVM 参数(如 -Xmx/-Xms 等,视版本支持)。
  • 图形化工具(需能访问图形界面或配置远程 JMX)
    • JConsoleVisualVM 直连本地或远程 JVM,查看 内存、线程、类加载、CPU 等视图。

二 面向生产的指标化监控 JMX Exporter + Prometheus + Grafana

  • 指标暴露
    • 方案 A(通用 Java):部署 JMX Exporter,将 JVM MBeans 转为 Prometheus 指标;应用启动参数加入 -javaagent:/opt/jmx_exporter/jmx_prometheus_javaagent.jar=<端口>:/opt/jmx_exporter/config.yaml
    • 方案 B(Spring Boot):引入 Micrometer + Actuator,暴露 /actuator/prometheus 端点。
  • 采集与存储
    • Prometheus 配置 scrape:对通用 Java 用 job_name: ‘java-jmx’ 抓取 <主机>:<端口>/metrics;对 Spring Boot 用 job_name: ‘java-app’ 抓取 <主机>:<端口>/actuator/prometheus
  • 可视化与告警
    • Grafana 接入 Prometheus 数据源,导入 JVM/Micrometer 仪表盘(如 JVM Overview、Spring Boot 2.x/3.x)。
    • Prometheus 配置 Alertmanager 规则(示例):当 JVM 堆使用率 > 80% 持续 5 分钟Full GC 次数在 15 分钟内 > 3 次 触发告警。

三 远程诊断与可视化连接

  • JMX 远程开启(示例,生产请开启认证与加密)
    • 启动参数:
      • -Dcom.sun.management.jmxremote
      • -Dcom.sun.management.jmxremote.port=9010
      • -Dcom.sun.management.jmxremote.authenticate=false
      • -Dcom.sun.management.jmxremote.ssl=false
    • 客户端工具:JConsole/VisualVM 通过 service:jmx:rmi:///jndi/rmi://<主机>:9010/jmxrmi 连接,在线查看 内存、线程、类、CPU 等。
  • 安全建议
    • 仅在内网开放 JMX/RMI;启用 用户名/密码SSL/TLS;限制来源 IP;必要时通过 SSH 隧道 访问。

四 可用性守护与自动化恢复

  • 进程存活与健康
    • 定时巡检:用 crontab 执行脚本检查 PID 是否存在、端口是否监听、/health 是否 200,异常时 重启 并记录日志。
    • 服务化托管:使用 systemd 管理应用,配置 Restart=on-failureRestartSec=10,结合 ExecStart 指向启动脚本或 java -jar
  • 日志与诊断
    • 统一日志:应用日志输出到 /var/log//;配合 journalctl -u tail -f 实时排查。
    • 故障现场:异常时自动执行 jstack > /var/log//jstack-$(date +%F-%H%M%S).logjmap -dump(谨慎使用)保留证据。

五 关键指标与阈值示例

维度 关键指标 常用命令/来源 建议阈值与动作
进程存活 PID 是否存在、端口是否监听 jps/ps、netstat/ss 不存在即告警并尝试重启
CPU 进程 CPU 占用 top -p 持续 > 80% 告警,排查 GC/锁/热点
内存 堆使用率、GC 次数/时间 jstat -gcutil 堆 > 80%FGC 频繁 告警,检查对象增长与缓存策略
线程 线程总数、阻塞/等待数 jstack、VisualVM 线程数突增或大量 BLOCKED/WAITING 告警,排查死锁与阻塞
类加载 已加载类数量 jstat -class 持续增长伴 Perm/Metaspace 增长,检查类加载泄漏
响应健康 HTTP 200/503 Actuator/自定义健康 非 200 连续失败告警,联动重启或降级

以上方案可按需组合:命令行与 JVM 工具用于快速排障,JMX Exporter + Prometheus + Grafana用于长期观测与告警,systemd/crontab用于可用性守护。

0