JDK自带的jstat命令该怎么用详解
作者:爪哇手记
jstat是jdk的命令(查看jvm的统计信息),可以监控类似类加载信息,GC信息等,这篇文章主要介绍了JDK自带的jstat命令该怎么用的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
一、基础语法
jstat - [-t] [-h] [ []]
option:监控类型(如-gcutil监控GC百分比)。vmid:Java进程ID(通过jps获取)。interval:采样间隔(单位毫秒或秒,默认毫秒)。count:采样次数(默认无限次)。-t:添加时间戳列。-h:每输出``行后显示表头。
二、常用选项及输出解读
监控GC及内存使用(最常用)
- 命令:
jstat -gcutil 1000 10 每秒采样一次,共10次
- 输出示例:
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 0.0 12.5 78.3 35.2 89.6 85.4 45 0.32 3 0.15 0.47
- 关键字段:
- S0/S1:Survivor区使用率(过高可能Survivor不足)。
- E:Eden区使用率(接近100%触发Young GC)。
- O:老年代使用率(持续增长可能内存泄漏)。
- YGC/YGCT:Young GC次数及总耗时(频繁Young GC需增大新生代)。
- FGC/FGCT:Full GC次数及总耗时(频繁Full GC需优化老年代)。
查看内存容量细节
- 命令:
jstat -gc 显示各区域大小(字节)
- 输出示例:
S0C S1C S0U S1U EC EU OC OU MC MU YGC YGCT FGC FGCT GCT 64 64 0 16 1024 800 4096 1500 2560 2000 12 0.08 3 0.15 0.23
- 关键字段:
- S0C/S1C:Survivor区容量(单位KB)。
- EC/EU:Eden区容量及使用量。
- OC/O:老年代容量及使用量。
分析类加载
- 命令:
jstat -class 查看类加载/卸载情况
- 输出示例:
Loaded Bytes Unloaded Bytes Time 12345 2345.6 0 0.0 0.52
- 关键字段:
- Loaded:已加载类数量(突增可能动态生成类)。
- Unloaded:卸载类数量(非0可能类加载泄漏)。
追踪GC原因
- 命令:
jstat -gccause 显示最近一次GC原因
- 输出示例:
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC 0.0 12.5 78.3 35.2 89.6 85.4 45 0.32 3 0.15 0.47 Allocation Failure No GC
- 关键字段:
- LGCC:最近一次GC原因(如
Allocation Failure表示Eden区满)。
- LGCC:最近一次GC原因(如
三、典型场景应用
诊断Young GC频繁
jstat -gcutil 1000 持续监控Eden区使用率
- 问题表现:
E列接近100%,YGC次数快速增长。 - 解决方案:增大新生代(
-Xmn)或调整Survivor比例(-XX:SurvivorRatio)。
定位内存泄漏
jstat -gc 60000 10 每分钟采样,观察老年代增长
- 问题表现:
OU持续增长且FGC频繁。 - 解决方案:生成堆转储(
jmap -dump),用MAT分析泄漏对象。
分析元空间溢出
jstat -gcutil 查看Metaspace使用率
- 问题表现:
M列接近100%。 - 解决方案:限制元空间大小(
-XX:MaxMetaspaceSize=256m)。
四、注意事项
- 远程监控:
- 需配置
jstatd服务(JDK 8后推荐用jcmd替代)。 - 命令示例:
jstat -gcutil @ 1000 远程监控
- 需配置
- 输出解读:
- 百分比列(如
-gcutil)更直观,容量列(如-gc)适合分析绝对值。 - 结合
-t参数添加时间戳,便于关联业务峰值。
- 百分比列(如
- 与其他工具联动:
- 发现GC异常后,用
jmap -dump生成堆转储,再用MAT分析对象分布。 - 长期监控可通过脚本定期采集
jstat数据,结合awk分析趋势。
- 发现GC异常后,用
五、完整选项参考
| 选项 | 功能 | 典型输出字段 |
|---|---|---|
-gcnew | 新生代GC详情 | TT(对象年龄阈值)、DSS(Survivor目标大小) |
-gcold | 老年代GC详情 | MU(元空间使用量)、FGCT(Full GC总耗时) |
-printcompilation | JIT编译统计 | Compiled(编译方法数)、Failed(编译失败数) |
通过灵活组合选项和参数,jstat可成为JVM性能调优的核心工具。建议结合具体问题选择监控维度,并持续观察数据变化。
到此这篇关于JDK自带的jstat命令该怎么用的文章就介绍到这了,更多相关JDK自带jstat命令使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
