jstat

  • 可以检查 JVM 整体的运行情况,可以看到 新生代,老年代等的内存使用情况,以及GC 次数和耗时
  • 命令格式 如 jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
  • 其中 -option 必选参数表示命令参数 如 gc 等, -t 为可选参数表示是否打印时间(秒),-h<lines> 可选参数,表示每隔多少行打印头部列表,如设置 -h 5 , 那么每五条记录就会重新打印表头,vmid 必选参数,Java 进程idinterval 可选参数表示采样的时间间隔,count 可选参数表示需要采样多少条,

jstat -gc pid

  • jstat -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 )中当前的容量 (千字节)         
    • OGCMNold 代中初始化(最小)的大小 (千字节)         
    • OGCMXold 代的最大容量 (千字节)         
    • OGCold 代当前新生成的容量 (千字节)         
    • PGCMNperm 代中初始化(最小)的大小 (千字节)         
    • PGCMXperm 代的最大容量 (千字节)           
    • PGCperm 代当前新生成的容量 (千字节)         
    • S0 :年轻代中 From survivor (幸存区)已使用的占当前容量百分比         
    • S1 :年轻代中 To Survivor (幸存区)已使用的占当前容量百分比         
    • E :年轻代中 Eden (伊甸园)已使用的占当前容量百分比         
    • Oold 代已使用的占当前容量百分比         
    • Pperm 代已使用的占当前容量百分比         
    • S0CMX :年轻代中 From survivor (幸存区)的最大容量 (千字节)         
    • S1CMX :年轻代中 To Survivor (幸存区)的最大容量 (千字节)         
    • ECMX :年轻代中 Eden (伊甸园)的最大容量 (千字节)         
    • DSS :当前需要 survivor (幸存区)的容量 (千字节)( Eden 区已满)         
    • TT : 持有次数限制         
    • MTT : 最大持有次数限制

jstat -gcutil PID

  • 一般我们还可以通过 jstat -gcutil pid 来获取分代年龄的使用情况,显示为占比,如下,表头参考上面

jstat -gccapacity PID

  • -gccapacity 命令主要用来分析堆内存,用法参考上面,如下效果,表头含义参看上面

其他一些命令参数

  • jstat -gcnew PID : 年轻代GC 分析,其中 TTMTT 可以看到对象在年龄代存活的年龄和存活的最大年龄

  • jstat -gcnewcapacity PID : 年轻代内存分析

  • jstat -gcold PID: 老年代 GC 分析

  • jstat -gcoldcapacity: 老年代内存分析

  • jstat -gcmetacapacity PID: 元数据内存分析

jstat -class PID

  • 统计进程中加载的类的数量,如下:

  • 说明:
1
2
3
4
5
6

Loaded:加载class的数量
Bytes:所占用空间大小
Unloaded:未加载数量
Bytes:未加载占用空间
Time:时间

jstat -compiler PID

  • 编译信息的统计命令, 如下命令 jstat -class 15372

  • 说明:
1
2
3
4
5
6
Compiled:编译数量。
Failed:失败数量
Invalid:不可用数量
Time:时间
FailedType:失败类型
FailedMethod:失败的方法

jstat -printcompilation PID

  • JVM 编译方法的统计,如下命令 jstat -printcompilation 15372

  • 说明:
1
2
3
4
Compiled:最近编译方法的数量
Size:最近编译方法的字节码数量
Type:最近编译方法的编译类型。
Method:方法名标识。

好了今天就说到这里, jstat 死一个非常还用的工具,需要平时多使用多分析才能真真掌握,下次我们接着说相关的工具的使用~🕹🕹🕹🕹