jstat 是 JDK 自带的一个命令行工具,全称为 Java Virtual Machine statistics monitoring tool,可以用来监视和分析 Java 应用程序的内存使用和性能情况。jstat 命令可以显示有关 Java 堆和非堆内存使用情况、类加载、垃圾回收、线程和编译器等方面的信息。
语法
jstat [ generalOption | outputOptions vmid [ interval[s|ms] [count] ] ]
参数说明:
- generalOption:一般选项,用于设置 jstat 命令的全局行为。可以是以下选项之一:
- -class:显示类加载情况。
- -compiler:显示JIT编译器统计信息。
- -gc:显示垃圾回收统计信息。
- -gccapacity:显示垃圾回收堆内存使用情况。
- -gcmetacapacity:显示垃圾回收非堆内存使用情况。
- -gcnew:显示新生代垃圾回收统计信息。
- -gcnewcapacity:显示新生代垃圾回收堆内存使用情况。
- -gcold:显示老年代垃圾回收统计信息。
- -gcoldcapacity:显示老年代垃圾回收堆内存使用情况。
- -gcutil:显示垃圾回收堆内存使用情况总览。
- -printcompilation:显示 JIT 编译器编译情况。
- outputOptions:输出选项,用于设置 jstat 命令的输出格式。可以是以下选项之一:
- -t:输出时间戳。
- -h:输出帮助信息。
- -J:输出完整的 JVM 内部信息。
- vmid:Java 虚拟机进程 ID 或进程名。
- interval:指定采样间隔时间,默认单位是毫秒。可以使用 s 或 ms 后缀指定单位,例如 10s 或 500ms。
- count:指定采样次数,默认是无限次。
示例
jstat -class pid
显示加载class的数量,及所占空间等信息:
![截屏2023-07-08 21.55.53](https://raw.githubusercontent.com/lancelly/cloudimg/main/%E6%88%AA%E5%B1%8F2023-07-08%2021.55.53.png?token=AZ3ZDBTV2WDJNCOQFVKET33EVFVSW)
显示列名 | 具体描述 |
---|---|
Loaded | 装载的类的数量 |
Bytes | 装载类所占用的字节数 |
Unloaded | 卸载类的数量 |
Bytes | 卸载类的字节数 |
Time | 装载和卸载类所花费的时间 |
jstat -compiler pid
显示VM实时编译的数量等信息:
![截屏2023-07-08 21.59.16](https://raw.githubusercontent.com/lancelly/cloudimg/main/%E6%88%AA%E5%B1%8F2023-07-08%2021.59.16.png?token=AZ3ZDBQ55SJ37X77F5QK5ILEVFV7K)
显示列名 | 具体描述 |
---|---|
Compiled | 编译任务执行数量 |
Failed | 编译任务执行失败数量 |
Invalid | 编译任务执行失效数量 |
Time | 编译任务消耗时间 |
FailedType | 最后一个编译失败任务的类型 |
FailedMethod | 最后一个编译失败任务所在的类及方法 |
jstat -gc pid
可以显示gc的信息,查看gc的次数,及时间:
![截屏2023-07-08 22.01.15](https://raw.githubusercontent.com/lancelly/cloudimg/main/截屏2023-07-08%2022.01.15.png?token=AZ3ZDBTQARSSBNOH5XVYCW3EVFWGY)
显示列名 | 具体描述 |
---|---|
S0C | 年轻代中第一个survivor(幸存区)的容量 (字节) |
S1C | 年轻代中第二个survivor(幸存区)的容量 (字节) |
S0U | 年轻代中第一个survivor(幸存区)目前已使用空间 (字节) |
S1U | 年轻代中第二个survivor(幸存区)目前已使用空间 (字节) |
EC | 年轻代中 Eden(伊甸园)的容量 (字节) |
EU | 年轻代中 Eden(伊甸园)目前已使用空间 (字节) |
OC | 老年代的容量 (字节) |
OU | 老年代目前已使用空间 (字节) |
PC | Perm(持久代)的容量 (字节) |
PU | Perm(持久代)目前已使用空间 (字节) |
YGC | 从应用程序启动到采样时年轻代中 gc 次数 |
YGCT | 从应用程序启动到采样时年轻代中 gc 所用时间(s) |
FGC | 从应用程序启动到采样时老年代(full gc) gc 次数 |
FGCT | 从应用程序启动到采样时老年代(full gc) gc 所用时间(s) |
GCT | 从应用程序启动到采样时 gc 用的总时间(s) |
jstat -gccapacity pid
显示 VM 内存中三代(young, old, perm)对象的使用和占用大小:
![截屏2023-07-08 22.04.56](https://raw.githubusercontent.com/lancelly/cloudimg/main/%E6%88%AA%E5%B1%8F2023-07-08%2022.04.56.png?token=AZ3ZDBV66JFAZUD6U7C6CCTEVFWUS)
显示列名 | 具体描述 |
---|---|
NGCMN | 年轻代(young)中初始化(最小)的大小(字节) |
NGCMX | 年轻代(young)的最大容量 (字节) |
NGC | 年轻代(young)中当前的容量 (字节) |
S0C | 年轻代中第一个 survivor(幸存区)的容量 (字节) |
S1C | 年轻代中第二个 survivor(幸存区)的容量 (字节) |
EC | 年轻代中 Eden(伊甸园)的容量 (字节) |
OGCMN | 老年代中初始化(最小)的大小 (字节) |
OGCMX | 老年代的最大容量(字节) |
OGC | 老年代当前新生成的容量 (字节) |
OC | 老年代的容量 (字节) |
PGCMN | perm 代中初始化(最小)的大小 (字节) |
PGCMX | perm 代的最大容量 (字节) |
PGC | perm 代当前新生成的容量 (字节) |
PC | perm(持久代)的容量 (字节) |
YGC | 从应用程序启动到采样时年轻代中 gc 次数 |
FGC | 从应用程序启动到采样时老年代(full gc) gc 次数 |
jstat -gcutil pid
统计 gc 信息:
![截屏2023-07-08 22.09.33](https://raw.githubusercontent.com/lancelly/cloudimg/main/%E6%88%AA%E5%B1%8F2023-07-08%2022.09.33.png?token=AZ3ZDBRMLTTC7LPB26Z75O3EVFXF4)
显示列名 | 具体描述 |
---|---|
S0 | 年轻代中第一个 survivor(幸存区)已使用的占当前容量百分比 |
S1 | 年轻代中第二个 survivor(幸存区)已使用的占当前容量百分比 |
E | 年轻代中 Eden(伊甸园)已使用的占当前容量百分比 |
O | 老年代已使用的占当前容量百分比 |
P | perm 代已使用的占当前容量百分比 |
YGC | 从应用程序启动到采样时年轻代中 gc 次数 |
YGCT | 从应用程序启动到采样时年轻代中 gc 所用时间(s) |
FGC | 从应用程序启动到采样时老年代(full gc) gc 次数 |
FGCT | 从应用程序启动到采样时老年代(full gc) gc 所用时间(s) |
GCT | 从应用程序启动到采样时 gc 用的总时间(s) |
参考链接
-
https://blog.csdn.net/zhaozheng7758/article/details/8623549
-
https://www.linuxprobe.com/detailed-jstat-command.html