jvm工具(二)jstat

本文详细介绍了JVM监控工具jstat的各种使用选项及其输出参数的意义,包括类装载器行为、HotSpot JIT编译器行为、堆内存分区使用情况等关键监控指标。

详见:http://docs.oracle.com/javase/6/docs/technotes/tools/share/jstat.html

http://docs.oracle.com/javase/8/docs/technotes/tools/windows/jstat.html

 

二、JVM统计监控工具

jstat [ generalOption | outputOptions vmid [interval [s|ms] [count ]] ]

 

generalOption

-help 显示帮助信息。
-version 显示版本信息

-options 显示统计选项列表。

 

outputOptions

class 统计类装载器的行为。
Column Description
Loaded 类加载数量
Bytes  加载的大小(k)
Unloaded 类卸载的数量
Bytes 卸载的大小(k)
Time 时间花费在执行类加载和卸载操作

 

compiler 统计HotSpot Just-in-Time编译器的行为
Column Description
Compiled 编译任务的执行次数
Failed   编译任务的失败次数
Invalid  编译任务无效的次数
Time     编译任务花费的时间
FailedType 最后一次编译错误的类型
FailedMethod 最后一次编译错误的类名和方法

 

gc 统计堆各个分区的使用情况
Column Description
S0C 生还者区0 容量(KB)
S1C 生还者区1 容量(KB)
S0U 生还者区0 使用量(KB)
S1U 生还者区1 使用量(KB)
EC 伊甸园区容量(KB)
EU 伊甸园区使用量(KB)
OC 老年区容量(KB)
OU 老年区使用量(KB)
PC 永久区容量(KB)
PU 永久区使用量(KB)
YGC 新生代GC次数
YGCT 新生代GC时间
FGC full GC 事件的次数
FGCT full GC的时间
GCT 总GC时间

 

gccapacity 统计堆各个分区的容量
Column Description
NGCMN 最小新生代容量(KB)
NGCMX 最大新生代容量(KB)
NGC 当前新生代容量(KB)
S0C 当前生存者0区容量(KB)
S1C 当前生存者1区容量(KB)
OGCMN 老年代最小容量(KB)
OGCMX 老年代最大容量(KB)
OGC 当前老年代容量(KB).
OC 当前老年代?Current old space capacity (KB).
PGCMN 永久区最小容量(KB)
PGCMX 永久区最大容量(KB)
PGC 当前永久区容量(KB).
PC 当前永久区?Current Permanent space capacity (KB).
YGC young GC事件的次数
FGC Full GC次数

 

gccause 统计最后一次gc和当前gc的原因
Column Description
LGCC 最后一次GC的原因
GCC 当前GC的原因

gcnew 统计新生代行为
Column Description
S0C 当前生还者0区大小(KB)
S1C 当前生还者1区大小(KB)
S0U 生还者0区使用大小(KB)
S1U 生还者1区使用大小(KB)
TT 占有期阀值
MTT 占有期最大阀值
DSS 期望的生存者区大小(KB)
EC 当前伊甸园区大小(KB)
EU 伊甸园区使用大小(KB).
YGC young GC 次数。
YGCT 新生代GC时间。

 

gcnewcapacity 统计新生代大小和空间
Column Description
NGCMN     Minimum new generation capacity (KB).
NGCMX     Maximum new generation capacity (KB).
NGC     Current new generation capacity (KB).
S0CMX Maximum survivor space 0 capacity (KB).
S0C Current survivor space 0 capacity (KB).
S1CMX Maximum survivor space 1 capacity (KB).
S1C Current survivor space 1 capacity (KB).
ECMX Maximum eden space capacity (KB).
EC Current eden space capacity (KB).
YGC Number of young generation GC events.
FGC Number of Full GC Events.


gcold 统计老年代和永久代的行为
gcoldcapacity 统计老年代大小
gcpermcapacity 统计永久代大小
gcutil GC统计摘要
printcompilation HotSpot编译方法统计

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<think>好的,用户想了解如何使用jstat进行JVM性能调优。首先,我需要回忆jstat的功能和常用命令。根据引用[3]和[4],jstat主要用于监控JVM的类加载、内存、垃圾回收等信息,特别是三代内存的使用情况。 我应该先介绍jstat的基本用法,比如命令格式和常用参数。引用[4]提到了jstat -gccapacity <pid>,可以查看各代容量,这需要包括在回答里。另外,引用[3]提到jstat能实时查看内存和GC信息,所以需要说明如何用不同选项监控这些指标。 接下来,用户可能需要具体的监控指标和分析步骤。比如,使用jstat -gcutil查看各代使用百分比,或jstat -gcnew查看新生代GC情况。需要详细解释每个参数的作用,以及如何根据输出判断是否有内存泄漏或GC效率问题。 然后,结合实际调优案例会更有帮助。例如,发现Full GC频繁时,可能需要调整堆大小或优化老年代回收策略。引用[2]提到JVM调优方法论,应该结合性能监控和参数调整策略,比如调整-Xmx或-XX:SurvivorRatio。 需要注意用户可能对JVM内存结构不熟悉,所以解释各代的作用是必要的,比如新生代、老年代和元空间。同时,强调jstat需要结合其他工具如VisualVM和MAT一起使用,如引用[3]所述,提供全面的调优建议。 最后,生成相关问题时要围绕jstat的高级用法、常见问题排查、与其他工具对比,以及调优后的验证方法。确保问题能引导用户深入学习和应用相关知识。</think>### 如何使用jstat进行JVM性能调优 #### 1. **jstat工具简介** jstat是JDK自带的JVM统计监测工具,主要用于实时查看JVM的类加载、内存分配、垃圾回收(GC)等运行状态。通过分析其输出数据,可以快速定位内存泄漏、GC效率低等问题[^3][^4]。 --- #### 2. **基本命令格式** ```bash jstat [options] <pid> [interval] [count] ``` - **`<pid>`**: JVM进程ID(可通过`jps`命令获取) - **`interval`**: 数据采样间隔(单位:毫秒) - **`count`**: 采样次数 --- #### 3. **关键监控指标与参数** | 参数 | 功能说明 | |--------------|-----------------------------------------------------------------------------------| | `-gcutil` | 显示各内存区域使用百分比(**最常用**) | | `-gccapacity`| 显示各内存代(Young/Old/Perm)的容量与使用量 | | `-gcnew` | 监控新生代(Young Gen)的GC行为与对象分配情况 | | `-gcold` | 监控老年代(Old Gen)的内存使用与Full GC情况 | --- #### 4. **调优步骤与示例** **步骤1:查看内存使用概况** ```bash jstat -gcutil <pid> 1000 5 # 每秒采样1次,共5次 ``` 输出示例: ``` S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 0.00 99.80 45.32 78.45 94.12 85.23 15 0.250 3 0.980 1.230 ``` - **关键列解析**: - **`E`**:新生代Eden区使用率 - **`O`**:老年代使用率 - **`FGC`**:Full GC次数 - **`FGCT`**:Full GC总耗时[^3] **步骤2:分析GC效率问题** - 若**`FGC`频繁且`FGCT`高**:可能老年代内存不足,需调整`-Xmx`(最大堆大小)或优化对象生命周期。 - 若**`E`区使用率长期>90%**:可能新生代过小,需调整`-XX:NewRatio`或`-Xmn`[^2]。 **步骤3:内存泄漏排查** ```bash jstat -gccapacity <pid> ``` - 关注**`OGCMX`(老年代最大容量)与`OGC`(当前老年代容量)**的差值,若持续缩小且`O`区使用率上升,可能存在内存泄漏。 --- #### 5. **调优案例** **场景**:某应用频繁触发Full GC(`FGC=10次/分钟`) - **jstat分析**:`jstat -gcold <pid>`显示老年代使用率`O`在每次Full GC后仅下降5% - **调优措施**: 1. 增大堆大小:`-Xmx4G → -Xmx8G` 2. 优化对象缓存策略,减少长生命周期对象驻留 - **验证结果**:Full GC频率降低至`2次/小时`,`FGCT`减少70% --- #### 6. **注意事项** - 需**结合其他工具**(如`VisualVM`分析对象分布、`MAT`分析堆转储)进行综合诊断 - 监控时间间隔不宜过短(避免影响性能),建议从`1000ms`开始
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值