温馨提示×

Java在CentOS上的性能如何监控

小樊
35
2025-11-29 16:55:05
栏目: 编程语言

Java 在 CentOS 上的性能监控实践

一 系统级监控

  • 进程与资源快照:使用 ps -ef | grep java 快速定位 PID;用 top -p 实时查看 CPU、内存 占用,按 Shift+M 按内存排序;需要更友好界面可用 htop。这些命令适合快速排查“哪个 Java 进程吃资源”。
  • 综合资源监控:用 dstat -ta 16 同时观察 CPU、内存、磁盘、网络;用 nmon 做多维度资源面板(安装后可交互选择监控项)。
  • 场景建议:先用系统级工具确认是否存在资源瓶颈(CPU飙升、内存吃紧、I/O 等待),再深入到 JVM 与应用指标定位根因。

二 JVM 内置与命令行工具

  • 基础定位:用 jps -l 列出所有 Java 进程及主类,获取 PID
  • GC 与堆:用 jstat -gcutil <interval_ms> 观察 Eden、Survivor、Old、Metaspace 使用率与 YGC/YGCT、FGC/FGCT;用 jstat -gc 查看更细的 GC 统计。
  • 线程与死锁:用 jstack 打印线程栈,排查 BLOCKED/DEADLOCK;高 CPU 时结合线程栈定位热点方法。
  • 内存与对象:用 jmap -heap 查看堆配置与使用情况;用 jmap -dump:format=b,file=heap.hprof 生成堆转储,再用 Eclipse MAT 分析泄漏与大对象。
  • 参数与运行时:用 jinfo 查看/调整部分 JVM 参数(如系统属性、日志配置等)。

三 远程可视化与 APM

  • JMX 远程:启动时开启 JMX(示例参数见下),配合 JConsole/VisualVM 远程查看 内存、线程、类加载、MBeans 等;生产环境务必开启 认证与 SSL
  • Prometheus 方案:通过 JMX Exporter 将 JVM 指标暴露为 /metrics,由 Prometheus 拉取,配合 Grafana 做可视化与告警。
  • APM 与分布式追踪:使用 SkyWalking 做服务拓扑、调用链与性能分析;Spring Boot Actuator + Micrometer 暴露应用指标;商业 APM 如 New Relic / AppDynamics 提供全链路性能洞察。

四 快速上手命令清单

  • 查找进程:
    • 列出 Java 进程:jps -l
    • 按名称筛选:ps -ef | grep java
  • 资源监控:
    • 实时查看:top -p (Shift+M 按内存)
    • 综合面板:dstat -ta 16nmon
  • JVM 诊断:
    • GC 使用率:jstat -gcutil 1000
    • 线程栈:jstack
    • 堆概要:jmap -heap
    • 堆转储:jmap -dump:format=b,file=heap.hprof
    • 参数查看:jinfo
  • 远程 JMX 最小示例(仅测试环境):
    • 启动参数:
      -Dcom.sun.management.jmxremote
      -Dcom.sun.management.jmxremote.port=9010
      -Dcom.sun.management.jmxremote.authenticate=false
      -Dcom.sun.management.jmxremote.ssl=false
    • 连接工具:JConsoleVisualVM 通过 service:jmx:rmi:///jndi/rmi://:9010/jmxrmi

五 关键指标与告警建议

  • 建议重点观测与告警的指标如下:
维度 关键指标 常用工具 典型阈值或动作
系统 CPU 使用率Load 平均 top、dstat、nmon Load 持续高于 CPU 核数 或 CPU > 80% 持续 5 分钟,优先排查热点线程与 GC
内存 物理内存使用率Swap 使用 top、dstat 接近物理内存上限或频繁 Swap,检查堆大小与对象增长
磁盘 I/O await、r/s、w/s dstat、nmon await 明显升高或 IOPS 打满,优化 SQL/缓存/存储
网络 带宽占用、丢包/重传 nmon、sar 带宽接近上限或重传率高,排查下游依赖与协议效率
JVM 堆 Heap 使用率、Eden/Survivor/Old jstat -gcutil Old 使用率高且 FGC 频繁,考虑增大堆或优化对象生命周期
GC 行为 YGC/YGCT、FGC/FGCT、GC 停顿 jstat -gcutil、GC 日志 FGC 次数/停顿 突增,结合堆转储与代码路径分析
线程 线程总数、BLOCKED/DEADLOCK jstack BLOCKED 线程多或发现死锁,优化锁粒度与并发控制
元空间 Metaspace 使用 jstat -gc、jmap -heap Metaspace 持续增长,检查类加载泄漏(如动态生成类)
应用 HTTP 99/95 线延迟、吞吐、错误率 APM、Micrometer/Prometheus P99 持续升高或错误率上升,联动追踪与日志定位
  • 实践提示:为 FGC 次数/停顿、线程死锁、CPU>阈值、磁盘/网络饱和 配置告警;结合 GC 日志与堆转储 做根因分析,避免只凭瞬时指标下结论。

0