【JVM 常用工具命令大全】

一、图形化工具

1. JConsole

  • 启动命令

    bash 复制代码
    jconsole
  • 功能

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

2. VisualVM

  • 启动命令

    bash 复制代码
    jvisualvm
  • 功能

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

二、命令行工具

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

  • 命令格式

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

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

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

2. jstack ------ 线程堆栈分析

  • 命令格式

    bash 复制代码
    jstack [-l] [-F] <pid>
  • 常用参数

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

    bash 复制代码
    # 获取线程 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 ------ 内存分析工具

  • 命令格式

    bash 复制代码
    jmap [option] <pid>
  • 常用选项

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

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

4. jinfo ------ 配置信息工具

  • 命令格式

    bash 复制代码
    jinfo [option] <pid>
  • 常用功能

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

三、实用技巧

1. 组合使用示例

bash 复制代码
# 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 → 分析各分区变化
相关推荐
tudficdew20 分钟前
实战:用Python分析某电商销售数据
jvm·数据库·python
sjjhd65242 分钟前
Python日志记录(Logging)最佳实践
jvm·数据库·python
2301_821369611 小时前
用Python生成艺术:分形与算法绘图
jvm·数据库·python
2401_832131952 小时前
Python单元测试(unittest)实战指南
jvm·数据库·python
shengli7224 小时前
机器学习与人工智能
jvm·数据库·python
2301_765703144 小时前
Python迭代器(Iterator)揭秘:for循环背后的故事
jvm·数据库·python
2301_821369614 小时前
使用Python进行图像识别:CNN卷积神经网络实战
jvm·数据库·python
m0_561359674 小时前
使用Kivy开发跨平台的移动应用
jvm·数据库·python
qq_423233905 小时前
如何用FastAPI构建高性能的现代API
jvm·数据库·python
weixin_499771556 小时前
Python上下文管理器(with语句)的原理与实践
jvm·数据库·python