-XX:+PrintCommandLineFlags 查看程序使用的默认JVM参数
其中,默认是-XX:InitialHeapSize=2147483648 -XX:MaxHeapSize=27913093120,默认是字节B,
InitialHeapSize 等于 xms,为2147483648/(1024*1024)=2048M
MaxHeapSize 等于xmx为27913093120/(1024*1024)=26620M
-XX:InitialHeapSize=2147483648 -XX:MaxHeapSize=27913093120 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.6.RELEASE)
Xms与InitialHeapSize
Xms等价于InitialHeapSize,表示Heap的初始化大小,即JVM启动时,堆区的最小值,使用该参数的正确姿势是:
-Xms10m
-XX:InitialHeapSize=10m
一、jstat
可以通过JConsole查看概要,之后通过jstat具体查看堆信息,如eden区为179200KB
jstat 即Java Virtual Machine statistics(统计) monitoring(监听) tool,可用来观察java应用程序运行时的相关信息的工具,可通过它来观察 堆信息的详细情况。 一定需要进程ID号,即 <vmid>
C:\Users\cmcc>jstat
invalid argument count
Usage: jstat -help|-options
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
- option: 参数选项
- -t: 可以在打印的列加上Timestamp列,用于显示系统运行的时间
- -h: 可以在周期性数据数据的时候,可以在指定输出多少行以后输出一次表头
- vmid: Virtual Machine ID( 进程的 pid)
- interval: 执行每次的间隔时间,单位为毫秒
- count: 用于指定输出多少次记录,缺省则会一直打印
heap 堆、 capacity 容量; 容积、 permanent 永久的、 eden 伊甸园、tenured 终身的; 长期保有的;
可通过jstat -options
C:\Users\cmcc>jstat -options
-class
-compiler
-gc
-gccapacity
-gccause
-gcmetacapacity
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcutil
-printcompilation
- option: 参数选项
-class:统计class loader行为信息
-compiler:统计编译行为信息
-gc:统计jdk gc时heap信息
-gccapacity:统计不同的generations(不知道怎么翻译好,包括新生区,老年区,permanent区)相应的heap容量情况
-gccause:统计gc的情况,(同-gcutil)和引起gc的事件
-gcnew:统计gc时,新生代的情况
-gcnewcapacity:统计gc时,新生代heap容量
-gcold:统计gc时,老年区的情况
-gcoldcapacity:统计gc时,老年区heap容量
-gcpermcapacity:统计gc时,permanent区heap容量
-gcutil:统计gc时,heap情况
输出:
实例1:
jstat -gcnew -t 12140 1000 2 表示统计gc时,新生代的情况,进程为12140,每隔1秒统计一次,一共统计2次。
Timestamp S0C S1C S0U S1U TT MTT DSS EC EU YGC
YGCT
491.8 38400.0 26112.0 0.0 25866.8 6 15 38400.0 192512.0 10719.5
5 0.166
492.9 38400.0 26112.0 0.0 25866.8 6 15 38400.0 192512.0 10719.5
5 0.166
实例2、
C:\Users\cmcc>jstat -class 12140
Loaded Bytes Unloaded Bytes Time
4818 10653.1 0 0.0 11.85
- Loaded : 已经装载的类的数量
- Bytes : 装载类所占用的字节数
- Unloaded:已经卸载类的数量
- Bytes:卸载类的字节数
- Time:装载和卸载类所花费的时间
实例3、-compiler
C:\Users\cmcc>jstat -compiler 12140
Compiled Failed Invalid Time FailedType FailedMethod
3495 0 0 19.68 0
- Compiled:编译任务执行数量
- Failed:编译任务执行失败数量
- Invalid :编译任务执行失效数量
- Time :编译任务消耗时间
- FailedType:最后一个编译失败任务的类型
- FailedMethod:最后一个编译失败任务所在的类及方法
实例4 -gc ,因本地为jdk8,故为元数据,非永久区
C:\Users\cmcc>jstat -gc 12140
S0C S1C S0U S1U EC EU OC OU MC MU
CCSC CCSU YGC YGCT FGC FGCT GCT
38400.0 26112.0 0.0 25866.8 192512.0 70273.4 262144.0 14422.4 34608.0 3
3784.3 3888.0 3652.1 5 0.166 1 0.122 0.288
- S0C:年轻代中第一个survivor(幸存区)的容量 (KB)
- S1C:年轻代中第二个survivor(幸存区)的容量 (KB)
- S0U :年轻代中第一个survivor(幸存区)目前已使用空间 (KB)
- S1U :年轻代中第二个survivor(幸存区)目前已使用空间 (KB)
- EC :年轻代中Eden(伊甸园)的容量 (KB)
- EU :年轻代中Eden(伊甸园)目前已使用空间 (KB)
- OC :Old代的容量 (KB)
- OU :Old代目前已使用空间 (KB)
- MC:metaspace(元空间)的容量 (KB)
- MU:metaspace(元空间)目前已使用空间 (KB)
- YGC :从应用程序启动到采样时年轻代中gc次数
- YGCT :从应用程序启动到采样时年轻代中gc所用时间(s)
- FGC :从应用程序启动到采样时old代(全gc)gc次数
- FGCT :从应用程序启动到采样时old代(全gc)gc所用时间(s)
- GCT:从应用程序启动到采样时gc用的总时间(s)
- CCSMN:最小压缩类空间大小
- CCSMX:最大压缩类空间大小
- CCSC:压缩类空间大小
- CCSU:压缩类空间使用大小
C:\Users\cmcc>jstat -gccapacity 12140
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC
OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
262144.0 262144.0 262144.0 38400.0 41472.0 179200.0 262144.0 262144.0 2621
44.0 262144.0 0.0 1081344.0 35496.0 0.0 1048576.0 4016.0 6
2
输出说明:
NGCMN:新生代最小值(KB)
NGCMX:新生代最大值(KB)
NGC:当前新生代大小(KB)
OGCMN:老年代最小值
OGCMX:老年代最大值
OGC:老年代大小
OC:老年代容量
- MCMN:metaspace(元空间)中初始化(最小)的大小 (KB)
- MCMX :metaspace(元空间)的最大容量 (KB)
- MC :metaspace(元空间)当前新生成的容量 (KB)
- CCSMN:最小压缩类空间大小
- CCSMX:最大压缩类空间大小
- CCSC:当前压缩类空间大小
- YGC :从应用程序启动到采样时年轻代中gc次数
- FGC:从应用程序启动到采样时old代(全gc)gc次数
C:\Users\cmcc>jstat -gccause 12140
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
LGCC GCC
0.00 0.00 61.47 6.68 97.37 92.76 6 2.824 2 7.022 9.84
6 Metadata GC Threshold No GC
- LGCC:最后一次GC原因
- GCC:当前GC原因(No GC 为当前没有执行GC)
输出说明:
3.3 输出参数内容
S0 — Heap上的 Survivor space 0 区已使用空间的百分比
S0C:S0当前容量的大小
S0U:S0已经使用的大小
S1 — Heap上的 Survivor space 1 区已使用空间的百分比
S1C:S1当前容量的大小
S1U:S1已经使用的大小
E — Heap上的 Eden space 区已使用空间的百分比
EC:Eden space当前容量的大小
EU:Eden space已经使用的大小
O — Heap上的 Old space 区已使用空间的百分比
OC:Old space当前容量的大小
OU:Old space已经使用的大小
P — Perm space 区已使用空间的百分比
PC:Perm space当前容量的大小
PU:Perm space已经使用的大小
- MC:metaspace(元空间)的容量 (KB)
- MU:metaspace(元空间)目前已使用空间 (KB)
- TT:新生代对象晋升到老年代对象的年龄
- MTT:新生代对象晋升到老年代对象的年龄最大值
- DSS:所需的survivor区大小
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGC+FGC
实例5 -gcnewcapacity 年轻代对象的信息及其占用量
C:\Users\cmcc>jstat -gcnewcapacity 12140
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX
EC YGC FGC
262144.0 262144.0 262144.0 87040.0 38400.0 87040.0 41472.0 261120.0
179200.0 6 2
S0CMX:s0区最大值
S1CMX:s1区最大值
YGC:新生代GC次数
实例6:-gcold 展现老年代的GC概况
C:\Users\cmcc>jstat -gcold 12140
MC MU CCSC CCSU OC OU YGC FGC FGCT
GCT
35496.0 34561.4 4016.0 3725.3 262144.0 17503.0 6 2 7.02
2 9.846
实例7: -gcoldcapacity 展现老年代的容量信息
C:\Users\cmcc>jstat -gcoldcapacity 12140
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
262144.0 262144.0 262144.0 262144.0 6 2 7.022 9.846
实例8:-gcutil 展示GC回收相关情况
C:\Users\cmcc>jstat -gcutil 12140
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 87.18 6.68 97.37 92.76 6 2.824 2 7.022 9.84
6
S0:S0区使用的百分比
S1:S1区使用百分比
E:eden区使用百分比
O:old区使用百分比
M:元数据区使用百分比