JVM 常用工具命令大全

发布于:2025-07-16 ⋅ 阅读:(21) ⋅ 点赞:(0)

JVM 常用工具命令大全

定义:在JVM中主要有命令行工具和对应的图形化工具,命令行工具较为简单直接操作,图形化更容易通过一个可视平台去观看其中JVM信息的情况。二者都有其独特之处。

一、图形化工具

1. JConsole

启动命令

jconsole

功能

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

2. VisualVM

启动命令

jvisualvm

功能

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

二、命令行工具

1. jstat - JVM统计监控工具

常用命令格式

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

常用选项

选项 说明
-class 类加载统计
-gc GC堆状态
-gccapacity 各区容量
-gcutil GC统计汇总
-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:<format> 生成堆转储快照
-finalizerinfo 显示等待finalize的对象

示例

# 生成堆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>

三、使用技巧

组合使用示例

# 快速诊断流程
jps -mlvV | grep <app_name>  # 找PID
jstat -gcutil <pid> 1000 5   # 看GC
jstack <pid> > thread.txt    # 线程分析
jmap -histo:live <pid> | head -20  # 对象统计

生产环境注意事项

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

常用分析流程

  1. 高CPU
    top -H → jstack → 16进制线程ID匹配
  2. 内存泄漏
    jmap -histo → 分析大对象 → jmap -dump → MAT分析
  3. GC问题
    jstat -gcutil → 分析各分区变化

网站公告

今日签到

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