【JVM 常用工具命令大全】

一、图形化工具

1. JConsole

  • 启动命令

    jconsole
    
  • 功能

    • 监控堆内存、线程、类加载情况
    • 查看 MBean 信息
    • 监控 CPU 使用率
    • 支持远程连接 JMX

2. VisualVM

  • 启动命令

    jvisualvm
    
  • 功能

    • 更强大的性能分析功能
    • 支持插件扩展(如 GC 插件)
    • 线程转储分析
    • 内存采样和 CPU 分析
    • 支持快照对比

二、命令行工具

1. jstat —— JVM 统计监控工具

  • 命令格式

    jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
    
    • < > 必须参数
    • [ ] 可选参数
  • 常用选项

    选项说明
    -class类加载统计
    -gcGC 堆状态
    -gccapacity各区容量
    -gcutilGC 统计汇总
    -gccause最近 GC 原因
    -gcnew新生代统计
    -gcold老年代统计
  • 示例

    # 每 1 秒打印一次 GC 情况,共打印 5 次
    jstat -gcutil -h5 <pid> 1000 5
    
    # 带时间戳输出
    jstat -gc -t <pid> 1000
    

2. jstack —— 线程堆栈分析

  • 命令格式

    jstack [-l] [-F] <pid>
    
  • 常用参数

    参数说明
    -l长列表,打印锁的附加信息
    -F强制 dump(当 jstack 无响应时使用)
    -m混合模式(Java 和 Native 帧)
  • 示例

    # 获取线程 dump 并输出到文件
    jstack -l 1234 > thread_dump.txt
    
    # 查找 CPU 高的线程(配合 top 命令)
    top -H -p <pid>
    printf "%x\n" <nid>     # 将线程 ID 转为 16 进制
    jstack <pid> | grep -A 20 <nid_hex>
    

3. jmap —— 内存分析工具

  • 命令格式

    jmap [option] <pid>
    
  • 常用选项

    选项说明
    -heap显示堆概要信息
    -histo[:live]显示堆中对象统计(live 表示只统计存活对象)
    -dump生成堆转储快照
    -finalizerinfo显示等待 finalizer 的对象
  • 示例

    # 生成堆 dump 文件(生产环境慎用,会 STW)
    jmap -dump:format=b,file=heap.hprof 1234
    
    # 显示存活对象统计
    jmap -histo:live 1234 | head -20
    

4. jinfo —— 配置信息工具

  • 命令格式

    jinfo [option] <pid>
    
  • 常用功能

    # 查看所有系统属性
    jinfo -sysprops <pid>
    
    # 查看指定 JVM 参数
    jinfo -flag MaxHeapSize <pid>
    
    # 动态修改部分参数(仅支持可写的参数)
    jinfo -flag +PrintGCDetails <pid>
    

三、实用技巧

1. 组合使用示例

# 1. 找到目标应用的 PID
jps -mlvV | grep <app_name>

# 2. 观察 GC 情况
jstat -gcutil <pid> 1000 5

# 3. 分析线程
jstack <pid> > thread.txt

# 4. 查看对象分布
jmap -histo:live <pid> | head -20

2. 生产环境注意事项

  • jmap -dump 会导致 STW(Stop-The-World),谨慎使用
  • 优先使用 jcmd GC.heap_dump 替代 jmap
  • 线程 dump 建议连续做 3 次(间隔 5 秒)
  • 使用 -F 参数时,可能造成 JVM 暂停更久

3. 常用分析流程

  • 高 CPUtop -Hjstack → 16 进制线程 ID 匹配
  • 内存泄漏jmap -histo → 分析大对象 → jmap -dump → MAT 分析
  • GC 问题jstat -gcutil → 分析各分区变化
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值