java调试-jstat命令

jstat命令使用

jstat是一个可以用于观察java应用程序运行时相关信息的工具,功能非常强大,可以通过它查看堆信息的详细情况。

基本用法

jstat命令的基本使用语法如下:

jstat -option [-t] [-h] pid [interval] [count]

  • 选项option可以由以下值构成。
    • -class:显示ClassLoader的相关信息。
    • -compiler:显示JIT编译的相关信息。
    • -gc:显示与gc相关的堆信息。
    • -gccapacity:显示各个代的容量及使用情况。
    • -gccause:显示垃圾回收的相关信息(同-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因。
    • -gcnew:显示新生代信息。
    • -gcnewcapacity:显示新生代大小与使用情况。
    • -gcold:显示老生代和永久代的信息。
    • -gcoldcapacity:显示老年代的大小。
    • -gcpermcapacity:显示永久代的大小。
    • -gcutil:显示垃圾收集信息。
    • -printcompilation:输出JIT编译的方法信息。
  • -t参数可以在输出信息前面加上一个Timestamp列,显示程序运行的时间。
  • -h参数可以在周期性的数据输出时,输出多少行数据后,跟着输出一个表头信息。
  • interval参数用于指定输出统计数据的周期,单位为毫秒(ms)。
  • count参数用于指定一共输出多少次数据。

详细使用

-class使用

下面命令输出pid为2500这个进程的ClassLoader相关信息,每秒统计一次信息,一共输出3次。

1
2
3
4
5
nalideMacBook-Pro-4:~ nali$ jstat -class -t 13640 1000 3
Timestamp Loaded Bytes Unloaded Bytes Time
1522.7 414 827.5 0 0.0 0.13
1523.7 414 827.5 0 0.0 0.13
1524.7 414 827.5 0 0.0 0.13

Loaded表示载入的类的数量,第一个Bytes表示载入的类的合计大小,Unloaded表示卸载的类数量,第二个Bytes表示卸载的类的合计大小,Time表示加载和卸载类花的总的时间。

-compiler使用

下面的命令查看JIT编译的信息:

1
2
3
nalideMacBook-Pro-4:~ nali$ jstat -compiler -t 13640
Timestamp Compiled Failed Invalid Time FailedType FailedMethod
1814.8 99 0 0 0.51 0

Compiled表示编译任务执行的次数,Failed表示编译失败的次数,Invalid表示编译不可用的次数,Time表示编译的总耗时,FailedType表示最后一次编译的类型,FailedMethod表示最后一次编译失败的类名和方法名。

-gc使用

下面的命令显示与gc相关的堆信息的输出:

1
2
3
4
5
nalideMacBook-Pro-4:~ nali$ jstat -gc 16309
S0C S1C S0U S1U EC EU OC OU MC MU
45056.0 55296.0 44588.0 0.0 336896.0 222238.4 171520.0 86902.0 - -
CCSC CCSU YGC YGCT FGC FGCT GCT
- - 8 0.312 1 1.328 1.640
  • S0C:s0(from)的大小(KB)
  • S1C:s1(from)的大小(KB)
  • S0U:s0(from)已使用的空间(KB)
  • S1U:s1(from)已经使用的空间(KB)
  • EC:eden区的大小(KB)
  • EU:eden区已经使用的空间(KB)
  • OC:老年代大小(KB)
  • OU:老年代已经使用的空间(KB)
  • MC:方法区大小(KB)
  • MU:方法区使用大小(KB)
  • CCSC:压缩类空间大小(KB)
  • CCSU:压缩类空间使用大小(KB)
  • YGC:新生代gc次数
  • YGCT:新生代gc耗时
  • FGC:Full gc次数
  • FGCT:Full gc耗时
  • GCT:gc总耗时
-gccapacity使用

下面的命令显示了各个代的信息,与-gc相比,它不仅输出了各个代的当前大小,还输出了各个代的最大值与最小值:

1
2
3
4
5
6
nalideMacBook-Pro-4:~ nali$ jstat -gccapacity 16309
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX
44032.0 699392.0 626176.0 45056.0 55296.0 336896.0 87040.0 1397760.0
OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
171520.0 171520.0 - - - - - - 8 1
nalideMacBook-Pro-4:~ nali$
  • NGCMN:新生代最小值(KB)
  • NGCMX:新生代最大值(KB)
  • NGC:当前新生代大小(KB)
  • OGCMN:老年大最小值(KB)
  • OGCMX:老年代最大值(KB)
  • OGC:当前老年代大小(KB)
  • MCMN:方法区最小值(KB)
  • MCMX:方法区最大值(KB)
  • CCSMN:压缩类空间最小值(KB)
  • CCSMX:压缩类空间最大值(KB)
-gccause使用

下面命令显示最近一次gc的原因,以及当前gc的原因:

1
2
3
4
5
nalideMacBook-Pro-4:~ nali$ jstat -gccause 16309
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
98.96 0.00 65.97 50.67 - - 8 0.312 1 1.328 1.640
LGCC GCC
Allocation Failure No GC
  • LGCC:上次gc的原因,可以看到上次gc的原因是Allocation Failure
  • GCC:当前gc的原因,当前没有gc
-gcnew使用

下面的命令显示新生代的详细信息:

1
2
3
nalideMacBook-Pro-4:~ nali$ jstat -gcnew 16309
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
45056.0 55296.0 44588.0 0.0 5 15 55296.0 336896.0 222238.4 8 0.312
  • TT:新生代对象晋升到老年代对象的年龄。
  • MTT:新生代对象晋升到老年代对象的年龄的最大值。
  • DSS:所需的Survivor区的大小。
-gcnewcapacity使用

下面的命令详细输出了新生代各个区的大小信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
nalideMacBook-Pro-4:~ nali$ jstat -gcnewcapacity 16309
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC
44032.0 699392.0 626176.0 232960.0 45056.0 232960.0 55296.0 698368.0 336896.0
YGC FGC
8 1
```
- S0CMX:s0区的最大值(KB)
- S1CMX:s1区的最大值(KB)
- ECMX:eden区的最大值(KB)
##### -gcold使用
下面的命令显示老年代gc概况:
``` bash
nalideMacBook-Pro-4:~ nali$ jstat -gcold 16309
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
- - - - 171520.0 86902.0 8 1 1.328 1.640
-gcoldcapacity使用

下面的命令用于显示老年代的容量信息:

1
2
3
nalideMacBook-Pro-4:~ nali$ jstat -gcoldcapacity 16309
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
87040.0 1397760.0 171520.0 171520.0 8 1 1.328 1.640

热评文章