jstat 简介

  1. jstat -gc pid

            可以显示gc的信息,查看gc的次数,及时间。

            其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。

Chpcentos5-/opt/Best/log> jstat -gc 29430
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT
2560.0 2176.0  0.0   2176.0 280640.0 50731.3   349568.0   18721.5   21248.0 16118.2     99    1.863   0      0.000    1.863

      2.jstat -gccapacity pid

            可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,

            如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,

            PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。

            其他的可以根据这个类推, OC是old内纯的占用量。

hpcentos5-/opt/test/log> jstat -gccapacity 29430
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC      PGCMN    PGCMX     PGC       PC     YGC    FGC
174720.0 349504.0 349504.0 3584.0 3648.0 342144.0   349568.0   699072.0   349568.0   349568.0  21248.0 262144.0  21248.0  21248.0    116     0

     3.jstat -gcutil pid

            统计gc信息统计。

hpcentos5-/opt/_test/log> jstat -gcutil 29430
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
  0.00  90.74  64.26   6.03  76.03    127    2.569     0    0.000    2.569

     4.jstat -gcnew pid

           年轻代对象的信息。

hpcentos5-/opt/test/log> jstat -gcnew 29430
 S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT
3328.0 3328.0    0.0 3136.0  1  15 3328.0 342848.0 234078.3    137    2.818

     5.jstat -gcnewcapacity pid

           年轻代对象的信息及其占用量。

hpcentos5-/opt/test/log> jstat -gcnewcapacity 29430
  NGCMN      NGCMX       NGC      S0CMX     S0C     S1CMX     S1C       ECMX        EC      YGC   FGC
  174720.0   349504.0   349504.0   3264.0 116480.0 116480.0   3264.0   349376.0   342976.0   161     0

     6.jstat -gcold pid

          old代对象的信息。

hpcentos5-/opt/test/log> jstat -gcold 29430
   PC       PU        OC          OU       YGC    FGC    FGCT     GCT
 21248.0  16155.6    349568.0     28329.5    173     0    0.000    3.699

     7.jstat -gcoldcapacity pid

          old代对象的信息及其占用量。

hpcentos5-/opt/_test/log> jstat -gcoldcapacity 29430
   OGCMN       OGCMX        OGC         OC       YGC   FGC    FGCT     GCT
   349568.0    699072.0    349568.0    349568.0   196     0    0.000    4.160

     8.jstat -gcpermcapacity pid

          perm对象的信息及其占用量。

hpcentos5-/opt/_test/log> jstat -gcpermcapacity 29430
  PGCMN      PGCMX       PGC         PC      YGC   FGC    FGCT     GCT
   21248.0   262144.0    21248.0    21248.0   215     0    0.000    4.637

 

     9.jstat -class pid

          显示加载class的数量,及所占空间等信息。

hpcentos5-/opt/test/log> jstat -class 29430
Loaded  Bytes  Unloaded  Bytes     Time
  1787  3909.9        0     0.0       1.11

     10.jstat -compiler pid

          显示VM实时编译的数量等信息。

hpcentos5-/opt/_test/log> jstat -compiler 29430
Compiled Failed Invalid   Time   FailedType FailedMethod
     574      0       0     4.68          0

     11.stat -printcompilation pid

          当前VM执行的信息。

        一些术语的中文解释:

         S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
         S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
         S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
         S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
           EC:年轻代中Eden(伊甸园)的容量 (字节)
           EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
           OC:Old代的容量 (字节)
           OU:Old代目前已使用空间 (字节)
           PC:Perm(持久代)的容量 (字节)
           PU:Perm(持久代)目前已使用空间 (字节)
         YGC:从应用程序启动到采样时年轻代中gc次数
       YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
         FGC:从应用程序启动到采样时old代(全gc)gc次数
       FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
         GCT:从应用程序启动到采样时gc用的总时间(s)

    NGCMN:年轻代(young)中初始化(最小)的大小 (字节)

    NGCMX:年轻代(young)的最大容量 (字节)

        NGC:年轻代(young)中当前的容量 (字节)

   OGCMN:old代中初始化(最小)的大小 (字节) 

   OGCMX:old代的最大容量 (字节)

       OGC:old代当前新生成的容量 (字节)

   PGCMN:perm代中初始化(最小)的大小 (字节) 

   PGCMX:perm代的最大容量 (字节)   

       PGC:perm代当前新生成的容量 (字节)

          S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比

         S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比

           E:年轻代中Eden(伊甸园)已使用的占当前容量百分比

           O:old代已使用的占当前容量百分比

           P:perm代已使用的占当前容量百分比

  S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)

 S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节)

    ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)

       DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满)

          TT: 持有次数限制

       MTT : 最大持有次数限制

 

实例展示,如下是一个消息模拟+发程序,eden区一直增长(会自动回落),old区在很缓慢的增长,当old/perm空间不足时,会触犯发full GC

hpcentos5-/opt/BOCO.MQ/GAIA_test/bin> jstat -gcutil 31775 2000
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
 99.02   0.00  38.03  86.63  49.56  87710 2184.457     1    0.101 2184.558
  0.00  95.19  48.45  86.63  49.56  87713 2184.530     1    0.101 2184.630
 96.15   0.00  59.65  86.63  49.56  87716 2184.604     1    0.101 2184.704
  0.00  94.23  70.06  86.63  49.56  87719 2184.678     1    0.101 2184.779
 95.19   0.00  72.06  86.64  49.56  87722 2184.751     1    0.101 2184.852
  0.00  95.19  81.67  86.64  49.56  87725 2184.827     1    0.101 2184.928
 97.06   0.00  92.09  86.65  49.56  87728 2184.904     1    0.101 2185.005
 94.23   0.00   0.00  86.67  49.56  87732 2185.007     1    0.101 2185.107
  0.00  95.19   8.00  86.67  49.56  87735 2185.083     1    0.101 2185.183
100.00   0.00  18.81  86.68  49.56  87738 2185.158     1    0.101 2185.259
  0.00  96.15  26.01  86.69  49.56  87741 2185.239     1    0.101 2185.339
 95.19   0.00  36.02  86.70  49.56  87744 2185.315     1    0.101 2185.416
  0.00  95.19  46.03  86.70  49.56  87747 2185.388     1    0.101 2185.489
 93.27   0.00  56.04  86.71  49.56  87750 2185.461     1    0.101 2185.562
  0.00  95.19  58.45  86.72  49.56  87753 2185.532     1    0.101 2185.632
100.00   0.00  68.45  86.72  49.56  87756 2185.603     1    0.101 2185.704
  0.00  95.19  78.46  86.72  49.56  87759 2185.674     1    0.101 2185.775
 97.12   0.00  84.46  86.73  49.56  87762 2185.746     1    0.101 2185.846
  0.00  97.12  94.45  86.74  49.56  87766 2185.819     1    0.101 2185.919
  0.00  95.19   2.00  86.75  49.56  87769 2185.915     1    0.101 2186.016
 94.23   0.00  10.01  86.75  49.56  87772 2185.990     1    0.101 2186.091
  0.00  96.15  22.01  86.76  49.56  87775 2186.063     1    0.101 2186.164
 98.04   0.00  32.02  86.78  49.56  87778 2186.141     1    0.101 2186.242
  0.00  95.19  41.62  86.78  49.56  87781 2186.221     1    0.101 2186.322
 99.00   0.00  44.42  86.78  49.56  87784 2186.293     1    0.101 2186.394

 下面是另一个例子,程序old区已满,又回收不回来,Full GC不起作用,此时需要分析代码

Chpcentos5-/opt/BOCO.MQ/GAIA_test/bin> jstat -gcutil -h 5 1740 2000
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
  0.00   0.00 100.00 100.00  99.63    258   10.759   266 1288.284 1299.043
  0.00   0.00 100.00 100.00  99.66    258   10.759   267 1292.897 1303.657
  0.00   0.00 100.00 100.00  99.66    258   10.759   267 1292.897 1303.657
  0.00   0.00 100.00 100.00  99.66    258   10.759   267 1292.897 1303.657
  0.00   0.00 100.00 100.00  99.93    258   10.759   268 1297.528 1308.287
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
  0.00   0.00 100.00 100.00  99.93    258   10.759   268 1297.528 1308.287
  0.00   0.00 100.00 100.00  99.87    258   10.759   268 1297.528 1308.287
  0.00   0.00 100.00 100.00  99.63    258   10.759   269 1303.533 1314.292
  0.00   0.00 100.00 100.00  99.63    258   10.759   269 1303.533 1314.292
  0.00   0.00 100.00 100.00  99.64    258   10.759   270 1308.151 1318.910

 

此时程序不core,但是接收消息处理特别慢

 

<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`开始
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值