Java中常用命令jstat、jmap、jstack(基于jdk1.8)
在 Java 性能调优和故障排查中,jstat
、jmap
和 jstack
是三种常用的命令行工具,主要用于 监控 GC、查看内存快照、分析线程状态。
1. jstat(JVM 统计信息监控)
用于 实时监控 JVM 运行状态,主要关注 GC、类加载、编译 等信息。
option: 参数选项
-t: 可以在打印的列加上Timestamp列,用于显示系统运行的时间
-h: 可以在周期性数据数据的时候,可以在指定输出多少行以后输出一次表头
vmid: Virtual Machine ID( 进程的 pid)
interval: 执行每次的间隔时间,单位为毫秒
count: 用于指定输出多少次记录,缺省则会一直打印
option 可以从下面参数中选择
-class 显示ClassLoad的相关信息;
-compiler 显示JIT编译的相关信息;
-gc 显示和gc相关的堆信息;
-gccapacity 显示各个代的容量以及使用情况;
-gcmetacapacity 显示metaspace的大小
-gcnew 显示新生代信息;
-gcnewcapacity 显示新生代大小和使用情况;
-gcold 显示老年代和永久代的信息;
-gcoldcapacity 显示老年代的大小;
-gcutil 显示垃圾收集信息;
-gccause 显示垃圾回收的相关信息(通-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因;
-printcompilation 输出JIT编译的方法信息;
常用命令
jstat -gc <pid> 1000 10 # 每秒显示 GC 状态,执行 10 次
jstat -gcutil <pid> 1000 # 每秒显示 GC 占用率
jstat -class <pid> # 显示加载class的数量,及所占空间等信息
jstat -compiler <pid> # 查看 JIT 编译情况
jstat -gccapacity <pid> #JVM内存中三代(young,old,perm)对象的使用和占用大小
jstat -gcmetacapacity<pid> # metaspace 中对象的信息及其占用量。
示例
jstat -gcutil 177101 1000 5
177101
:进程 ID1000
:间隔 1 秒5
:执行 5 次- 输出示例
📌 参数说明
参数 | 含义 |
---|---|
S0, S1 |
Survivor 区使用率 |
E |
Eden 区使用率 |
O |
Old 区使用率 |
M |
Metaspace(元空间)使用率 |
CCS |
类压缩空间 |
YGC, YGCT |
年轻代 GC 次数、时间 |
FGC, FGCT |
Full GC 次数、时间 |
GCT |
GC 总时间 |
2. jmap(内存映射分析)
用于 查看堆内存、导出 heap dump。
常用命令
jmap -heap <pid> # 查看堆信息
jmap -histo <pid> # 按对象数量统计实例个数,如果指定了live子选项,则只计算活动的对象。
jmap -dump:format=b,file=heap.bin <pid> # 导出堆快照
示例
jmap -heap 12345
- 输出示例
📌 参数说明
参数 | 含义 |
---|---|
NewSize |
新生代大小 |
MaxHeapSize |
最大堆大小 |
MetaspaceSize |
元空间大小 |
3. jstack(线程快照分析)
用于 查看 Java 线程状态,分析死锁、阻塞情况。
常用命令
jstack -l <pid> # 查看线程堆栈
jstack -F <pid> # 强制生成堆栈信息(进程无响应时使用)
示例
jstack 12345
- 输出示例
"main" #1 prio=5 os_prio=0 tid=0x0000000002dcd000 nid=0x168c runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE at java.io.FileOutputStream.writeBytes(Native Method) at java.io.FileOutputStream.write(FileOutputStream.java:345)
📌 线程状态
状态 | 说明 |
---|---|
RUNNABLE |
线程正在运行 |
WAITING |
线程在等待(如 Object.wait() ) |
BLOCKED |
线程被锁住 |
TIMED_WAITING |
线程超时等待 |
分析死锁
jstack -l 12345 | grep -A 10 "Found one Java-level deadlock"
- 如果有死锁,
jstack
会输出Found one Java-level deadlock
及相关堆栈信息。
总结
命令 | 作用 | 适用场景 |
---|---|---|
jstat |
监控 GC、类加载、编译 | 分析 GC、内存占用 |
jmap |
查看堆、导出 heap dump | 内存泄漏分析 |
jstack |
线程快照 | 线程阻塞、死锁分析 |
本文作者:MuXinu
本文链接:https://www.cnblogs.com/MuXinu/p/18714860
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步