jstat 命令详解

jstat 命令详解与实例(JDK 8+ 环境)


一、核心功能与语法

jstat(JVM Statistics Monitoring Tool)是 JDK 自带的轻量级监控工具,用于实时采集 JVM 内存、GC 事件、类加载等运行状态数据,帮助开发者快速诊断性能瓶颈‌12。

基础语法‌:

jstat -<option> <pid> [interval] [count]
  • option:监控参数(如 -gcutil-gc 等)
  • pid:目标 Java 进程 ID
  • interval(可选):采样间隔时间(单位:毫秒)
  • count(可选):采样次数

二、常用参数与输出解析
  1. -gcutil(GC 利用率统计)
    显示各内存区域的使用百分比及 GC 事件统计,适合快速查看内存压力。

    jstat -gcutil <pid> 1000 5 # 每秒采样 1 次,共 5 次

    输出示例与字段解析‌:

    S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 
    0.00 72.47 35.50 45.20 95.11 91.45 150 3.440 8 0.295 3.735
    • S0/S1:Survivor 区使用率(%)
    • E:Eden 区使用率(%)
    • O:老年代使用率(%)
    • M:元空间(Metaspace)使用率(%)
    • YGC/YGCT:年轻代 GC 次数/总耗时(秒)
    • FGC/FGCT:Full GC 次数/总耗时(秒)
    • GCT:所有 GC 总耗时(秒)‌13
  2. -gc(堆内存详细容量统计)
    显示各内存区域的具体容量(单位:KB)及使用量。

    jstat -gc <pid> # 单次采样

    输出示例与字段解析‌:

    S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 
    20480 20480 0.0 13115 163840 113334 614400 436045 63872 61266 0 0 149 3.440 8 0.295 3.735
    • S0C/S1C:Survivor 区总容量
    • EC/EU:Eden 区总容量/已使用容量
    • OC/OU:老年代总容量/已使用容量
    • MC/MU:元空间总容量/已使用容量‌36
  3. 其他常用参数

    • -class:类加载/卸载统计(示例:jstat -class <pid>
    • -gccapacity:各内存区域容量阈值(如新生代最小/最大容量)
    • -gccause:显示最近一次 GC 的原因(如 Allocation Failure)‌56

三、调优场景与实例
  1. 诊断内存泄漏
    若老年代使用率(O)持续增长且 Full GC 后无明显下降:
     

    jstat -gcutil <pid> 2000 # 每 2 秒采样一次,观察 O 列变化

    输出分析‌:若 O 值从 70% → 85% → 95% 持续上升,可能存在内存泄漏‌13。

  2. 优化 GC 停顿时间
    若 YGCT(年轻代 GC 耗时)过高:

    jstat -gc <pid> 1000 10 # 每秒采样,观察 EU(Eden 使用量)增长速率

    调优方向‌:若 Eden 区快速填满(如每秒增加 200MB),可增大 -Xmn(年轻代大小)降低 GC 频率‌35。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值