可以检查 JVM 整体的运行情况,可以看到 新生代,老年代等的内存使用情况,以及GC 次数和耗时
命令格式 如 jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
其中 -option 必选参数表示命令参数 如 gc 等, -t 为可选参数表示是否打印时间(秒),-h<lines> 可选参数,表示每隔多少行打印头部列表,如设置 -h 5 , 那么每五条记录就会重新打印表头,vmid 必选参数,Java 进程id,interval 可选参数表示采样的时间间隔,count 可选参数表示需要采样多少条,
jstat -gc pidjstat -gc pid 这是最常用的语法,可以直接查看内存和垃圾回收情况
首先我们要获得Java 进程的 PID 信息,可以通过 jps 命令来获取
之后执行 jstat -gc pid 即可看到对应 Java 进程的内存情况,如下:
这里说明一下关于这些列名的含义:
S0C : 新生代中第一个 Survivor (即 From 区)的容量大小 (千字节)
S1C : 新生代中第二个 Survivor (即 To 区)的容量大小 (千字节)
S0U : 新生代 From Survivor 区已使用内存大小(千字节)
S1U : 新生代 To Survivor 区一使用内存大小(千字节)
EC : 新生代 Eden 区的容量大小(千字节)
EU : 新生代 Eden 区已使用内存大小(千字节)
OC : 老年代空间容量大小(千字节)
OU : 老年代已使用内存大小(千字节)
MC : 方法区的空间大小 (千字节)
MU : 方法区已使用的空间大小(千字节)
YGC : 从系统启动到现在 Young GC/Minor GC 的次数
YGCT : Young GC 总耗时(秒)
FGC :从系统启动到现在 Full GC 的次数
FGCT : Full GC 的总耗时(秒)
GCT : 垃圾回收总的耗时(秒)
NGCMN :年轻代( young )中初始化(最小)的大小 (千字节)
NGCMX :年轻代( young )的最大容量 (千字节)
GC :年轻代( young )中当前的容量 (千字节)
OGCMN : old 代中初始化(最小)的大小 (千字节)
OGCMX : old 代的最大容量 (千字节)
OGC : old 代当前新生成的容量 (千字节)
PGCMN : perm 代中初始化(最小)的大小 (千字节)
PGCMX : perm 代的最大容量 (千字节)
PGC : perm 代当前新生成的容量 (千字节)
S0 :年轻代中 From survivor (幸存区)已使用的占当前容量百分比
S1 :年轻代中 To Survivor (幸存区)已使用的占当前容量百分比
E :年轻代中 Eden (伊甸园)已使用的占当前容量百分比
O : old 代已使用的占当前容量百分比
P : perm 代已使用的占当前容量百分比
S0CMX :年轻代中 From survivor (幸存区)的最大容量 (千字节)
S1CMX :年轻代中 To Survivor (幸存区)的最大容量 (千字节)
ECMX :年轻代中 Eden (伊甸园)的最大容量 (千字节)
DSS :当前需要 survivor (幸存区)的容量 (千字节)( Eden 区已满)
TT : 持有次数限制
MTT : 最大持有次数限制
一般我们还可以通过 jstat -gcutil pid 来获取分代年龄的使用情况,显示为占比,如下,表头参考上面
jstat -gccapacity PID-gccapacity 命令主要用来分析堆内存,用法参考上面,如下效果,表头含义参看上面
其他一些命令参数jstat -gcnew PID : 年轻代GC 分析,其中 TT 和 MTT 可以看到对象在年龄代存活的年龄和存活的最大年龄
jstat -gcnewcapacity PID : 年轻代内存分析
jstat -gcold PID: 老年代 GC 分析