JVM--监控和故障处理工具

发布于:2025-07-12 ⋅ 阅读:(13) ⋅ 点赞:(0)

一、命令行工具

1. jps (Java Process Status)

作用:列出当前系统中所有的 Java 进程
常用命令

jps -l  # 显示进程ID和主类全名
jps -v  # 显示JVM启动参数

输出示例

1234 com.example.MainApp
5678 org.apache.catalina.startup.Bootstrap

2. jstat (JVM Statistics Monitoring Tool)

作用:实时监控 JVM 运行状态(GC、类加载、JIT编译等)
核心功能

   jstat -gcutil <pid> 1000 5 # 每1秒打印1次GC统计,共5次

关键指标

  • S0/S1:Survivor 区使用率

  • E:Eden 区使用率

  • O:Old 区使用率

  • YGC/YGCT:Young GC 次数/耗时

  • FGC/FGCT:Full GC 次数/耗时


3. jinfo (Configuration Info for Java)

作用:查看和动态修改 JVM 参数
常用命令

jinfo -flags <pid>       # 查看所有JVM参数
jinfo -flag MaxHeapSize <pid>  # 查看特定参数
jinfo -flag +PrintGC <pid>    # 动态启用PrintGC

4. jmap (Memory Map for Java)

作用:生成堆内存快照和内存统计
核心功能

典型场景:内存泄漏分析、对象分布统计


5. jhat (JVM Heap Analysis Tool)

作用:分析 jmap 生成的堆转储文件
使用流程

  1. 生成堆转储:jmap -dump:file=heap.bin <pid>

  2. 启动分析服务:jhat heap.bin

  3. 浏览器访问:http://localhost:7000/
    功能:对象查询、引用链分析、内存泄漏检测


6. jstack (Stack Trace for Java)

作用:生成线程快照(thread dump)
关键命令

jstack -l <pid> > thread.txt  # 生成线程快照并保存

诊断场景

  • 死锁检测(查找deadlock关键词)

  • 线程阻塞分析

  • CPU 飙高问题定位

二、图形化监控工具

   jvisualvm.exe JDK 自带的图形化监控诊断工具与你jps/jstack/jmap 等属于同一套工具链,但提供可视化操作界面。以下是关键解析:

一、典型使用场景

1. 快速定位内存泄漏
  • 步骤:

    1. 在进程列表中选择应用

    2. 点击 “堆 Dump” 生成快照

    3. 分析 “类” 标签页 → 按实例数/大小排序 → 定位可疑对象

2. 诊断 CPU 飙高
  • 步骤:

    1. 打开 “抽样器” → 点击 CPU 按钮

    2. 查看 “热点方法” 排名

    3. 结合 线程快照 分析阻塞栈

3. 分析死锁
  • 步骤:

    1. 打开 “线程” 标签页

    2. 点击 “检测死锁” → 自动标记死锁线程


二、与命令行工具对比

需求 推荐工具 原因
快速检查进程状态 jps 一条命令即完成
脚本自动化监控 jstat 适合集成到运维系统
深度分析内存泄漏 jvisualvm 可视化引用链,效率提升 10 倍+
生产环境紧急诊断 jcmd + jstack 轻量级,避免图形界面资源消耗
长期性能趋势分析 jvisualvm 支持保存快照对比历史数据

三、注意事项

  1. 版本兼容性

    • JDK 8 及之前:内置 jvisualvm

    • JDK 9+:需单独下载(从 JDK 分离为独立项目)


网站公告

今日签到

点亮在社区的每一天
去签到