当前位置: 首页 > news >正文

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

一、命令行工具

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 分离为独立项目)

http://www.dtcms.com/a/274330.html

相关文章:

  • Oracle 高可用性与安全性
  • SpringCloud【OpenFeign】
  • 数据治理(管理)能力评估——解读2024数据治理与数据管理能力成熟度评估模型【附全文阅读】
  • 10款主流报销管理平台对比及推荐
  • Linux操作系统之进程间通信:命名管道
  • Linux编程练习题1:打印图形
  • python学习DataFrame数据结构
  • 制作一款打飞机游戏79:道具拾取系统
  • c++设计模式:简单工厂模式
  • C++STL-list
  • 游戏的程序员会不会偷偷改自己账号的数据?
  • 线性回归的从零开始实现(详解部分疑问)
  • 【三】ObservableCollection 与 List 的区别
  • RK3566/RK3568 Android11 CAN开发(内核配置+测试验证+安卓app开发)
  • 2025 年第十五届 APMCM 亚太地区大学生数学建模竞赛C题 基于Quantum Boosting的二分类模型问题
  • 5G标准学习笔记15 --CSI-RS测量
  • 【龙泽科技】新能源汽车维护与动力蓄电池检测仿真教学软件【吉利几何G6】
  • 深入理解C语言内存空间、函数指针(三)(重点是函数指针)
  • Redis 主从复制及哨兵模式模拟部署
  • 3.检查函数 if (!CheckStart()) return 的妙用 C#例子
  • PBR渲染
  • 【网络安全】理解安全事件的“三分法”流程:应对警报的第一道防线
  • leaflet【十二】自定义图层——海量数据加载
  • 安全监测预警平台的应用场景
  • 机器学习数据集加载全攻略:从本地到网络
  • Git Submodule 介绍和使用指南
  • FS820R08A6P2LB——英飞凌高性能IGBT模块,驱动高效能源未来!
  • Vscode 下载远程服务器失败解决方法
  • Jenkins 版本升级与插件问题深度复盘:从 2.443 到 2.504.3 及功能恢复全解析
  • 和鲸社区深度学习基础训练营2025年关卡2(3)pytorch