JVM 常用命令(一)
这周末继续学习 JVM 的相关知识。
JVM 自带了很多命令用于监控环境,打印堆栈信息,以便我们准确地定位生产问题。学习这些命令也可以让我们更深入地了解 JVM。
常用的命令有:jps,jstat,jmap,jstack,jinfo,基于JDK1.7版本来学习。
jps
JVM Process Status 显示系统内所有的JVM虚拟机进程。
命令格式:
1 | jps [options] [hostid] |
options参数:
- -l : 输出主类全名或jar路径
- -q : 只输出 LVMID(本地虚拟机进程 ID)
- -m : 输出 JVM 启动时传递给 main() 的参数
- -v : 输出 JVM 启动时显示指定的 JVM 参数
[option]、[hostid] 参数也可以不写。当服务器中起多个 JVM 的时候可以执行 hostid 来定位具体的某台服务。
示例:
1 | jps -v |
jstat
jstat(JVM statistics Monitoring) 是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT 编译等运行数据。
命令格式:
1 | jstat [option] LVMID interval count |
参数
- [option] : 操作参数
- LVMID : 本地虚拟机进程ID
- [interval] : 连续输出的时间间隔
- [count] : 连续输出的次数
option 参数总览
参数 | 描述 |
---|---|
class | class loader的行为统计。Statistics on the behavior of the class loader. |
compiler | HotSpt JIT编译器行为统计。Statistics of the behavior of the HotSpot Just-in-Time compiler. |
gc | 垃圾回收堆的行为统计。Statistics of the behavior of the garbage collected heap. |
gccapacity | 各个垃圾回收代容量(young,old,perm)和他们相应的空间统计。Statistics of the capacities of the generations and their corresponding spaces. |
gcutil | 垃圾回收统计概述。Summary of garbage collection statistics. |
gccause | 垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因。Summary of garbage collection statistics (same as -gcutil), with the cause of the last and |
gcnew | 新生代行为统计。Statistics of the behavior of the new generation. |
gcnewcapacity | 新生代与其相应的内存空间的统计。Statistics of the sizes of the new generations and its corresponding spaces. |
gcold | 年老代和永生代行为统计。Statistics of the behavior of the old and permanent generations. |
gcoldcapacity | 年老代行为统计。Statistics of the sizes of the old generation. |
gcpermcapacity | 永生代行为统计。Statistics of the sizes of the permanent generation. |
printcompilation | HotSpot编译方法统计。HotSpot compilation method statistics. |
option 参数详解
-class
1 | jstat -class 10174 |
- Loaded : 加载class的数量
- Bytes : class字节大小
- Unloaded : 未加载class的数量
- Bytes : 未加载class的字节大小
- Time : 加载时间
-compiler
输出JIT编译过的方法数量耗时等
1 | jstat -compiler 10174 |
- Compiled : 编译数量
- Failed : 编译失败数量
- Invalid : 无效数量
- Time : 编译耗时
- FailedType : 失败类型
- FailedMethod : 失败方法的全限定名
-gc
垃圾回收堆的行为统计,常用命令
1 | jstat -gc 10174 |
C即Capacity 总容量,U即Used 已使用的容量
- S0C : survivor0区的总容量
- S1C : survivor1区的总容量
- S0U : survivor0区已使用的容量
- S1U : survivor1区已使用的容量
- EC : Eden区的总容量
- EU : Eden区已使用的容量
- OC : Old区的总容量
- OU : Old区已使用的容量
- PC 当前perm的容量 (KB)
- PU perm的使用 (KB)
- YGC : 新生代垃圾回收次数
- YGCT : 新生代垃圾回收时间
- FGC : 老年代垃圾回收次数
- FGCT : 老年代垃圾回收时间
- GCT : 垃圾回收总消耗时间
1 | jstat -gc 10174 2000 20 |
这个命令意思就是每隔2000ms输出1262的gc情况,一共输出20次
-gccapacity
同-gc,不过还会输出Java堆各区域使用到的最大、最小空间
1 | jstat -gccapacity 10174 |
- NGCMN : 新生代占用的最小空间
- NGCMX : 新生代占用的最大空间
- OGCMN : 老年代占用的最小空间
- OGCMX : 老年代占用的最大空间
- OGC:当前年老代的容量 (KB)
- OC:当前年老代的空间 (KB)
- PGCMN : perm占用的最小空间
- PGCMX : perm占用的最大空间
-gcutil
同-gc,不过输出的是已使用空间占总空间的百分比
1 | jstat -gcutil 10174 |
-gccause
垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因
1 | jstat -gccause 10174 |
- LGCC:最近垃圾回收的原因
- GCC:当前垃圾回收的原因
-gcnew
统计新生代的行为
1 | jstat -gcnew 10174 |
- TT:Tenuring threshold(提升阈值)
- MTT:最大的tenuring threshold
- DSS:survivor区域大小 (KB)
-gcnewcapacity
新生代与其相应的内存空间的统计
1 | jstat -gcnewcapacity 10174 |
- NGC:当前年轻代的容量 (KB)
- S0CMX:最大的S0空间 (KB)
- S0C:当前S0空间 (KB)
- ECMX:最大eden空间 (KB)
- EC:当前eden空间 (KB)
-gcold
统计老生代的行为
1 | jstat -gcold 10174 |
-gcoldcapacity
统计旧生代的大小和空间
1 | jstat -gcoldcapacity 10174 |
-gcpermcapacity
统计永久代行为
1 | jstat -gcpermcapacity 10174 |
-printcompilation
hotspot编译方法统计
1 | jstat -printcompilation 10174 |
- Compiled:被执行的编译任务的数量
- Size:方法字节码的字节数
- Type:编译类型
- Method:编译方法的类名和方法名。类名使用”/” 代替 “.” 作为空间分隔符. 方法名是给出类的方法名。显示的方法是实时的。
jinfo
jinfo(JVM Configuration info) 这个命令作用是实时查看和调整虚拟机运行参数。jps -v
口令只能查看到显示指定的参数,如果想要查看未被显示指定的参数的值就要使用 jinfo
口令
命令格式
jinfo [option][args] LVMID
option 参数
- -flag : 输出指定 args 参数的值
- -flags : 不需要 args 参数,输出所有 JVM 参数的值
- -sysprops : 输出系统属性,等同于
System.getProperties()
示例
1 | jinfo -flags 10174 |
未完待续……
- Title: JVM 常用命令(一)
- Author: 薛定谔的汪
- Created at : 2017-12-16 09:31:28
- Updated at : 2023-11-17 19:37:37
- Link: https://www.zhengyk.cn/2017/12/16/jvm/JVM-05/
- License: This work is licensed under CC BY-NC-SA 4.0.