JVM优化之JDK命令
本文将从以下命令或工具进行记录,本文章将持续补充
- Jmap
- Jstack
- Jinfo
- Jstat
Jmap命令详解
Jmap(Java Virtual Machine Memory Map)是JDK提供的用于生成Java虚拟机堆转储快照dump文件的命令行工具。它可以用于分析Java应用程序的内存使用情况,并诊断JVM性能问题。
Jmap基本语法
jmap [option] <pid>
其中:
- option:指定Jmap命令的操作。
- <pid>:要分析的Java进程的ID。
如果省略<pid>参数,则Jmap命令将列出所有正在运行的Java进程的ID。
Jmap命令的常用选项
选项 | 说明 |
---|---|
-help | 显示Jmap命令的帮助信息。 |
-histo | 显示堆中对象的分布情况,包括每个类型的对象数量和大小。 |
-heap | 显示堆的使用情况,包括堆的容量、已使用的内存量和剩余内存量等。 |
-finalizerinfo | 显示finalizer队列中等待执行finalize方法的对象的信息。 |
-dump | 生成堆转储快照文件。 |
-flags | 显示JVM的命令行参数。 |
-live | 只转储堆中的活动对象。 |
-printf | 使用指定的格式输出堆中的对象信息。 |
-threads | 显示线程的信息,包括线程的状态、拥有的锁等。 |
Jmap命令的常用用法
- 查看堆的使用情况
jmap -heap <pid>
- 查看对象的分布情况
jmap -histo <pid>
- num:序号
- instances:实例数量
- bytes:占用空间大小
- class name:类名称,[C is a char[],[S is a short[],[I is a int[],[B is a byte[],[[I is a int[][]
- 生成堆转储快照文件
jmap -dump:<dump-options> <pid>
dump-options:
- live
仅转储活动对象;如果未指定,则转储堆中的所有对象。 - format=b
二进制格式 - file=<file>
将堆转储到<file>
也可以设置内存溢出自动导出dump文件(内存很大的时候,可能会导不出来)
- -XX:+HeapDumpOnOutOfMemoryError
- -XX:HeapDumpPath=./ (路径)
Jmap命令的注意事项
- Jmap命令可能会导致JVM进行垃圾回收,因此在使用Jmap命令之前,建议先备份Java应用程序的运行状态。
- Jmap命令生成的堆转储快照文件可能非常大,因此在生成堆转储快照文件之前,需要确保有足够的磁盘空间。
- Jmap命令是JDK的一部分,因此需要先安装JDK才能使用Jmap命令。
Jstack命令详解
Jstack(Java Virtual Machine Stack Dump)是JDK提供的用于生成Java虚拟机线程堆栈快照的命令行工具。它可以用于分析Java应用程序的线程状态,并诊断JVM性能问题。
Jstack 基本语法
jstack [option] <pid>
其中:
- option:指定Jstack命令的操作。
- <pid>:要分析的Java进程的ID。
如果省略参数,则Jstack命令将列出所有正在运行的Java进程的ID。
Jstack命令的常用选项
选项 | 说明 |
---|---|
-help | 显示Jstack命令的帮助信息。 |
-l | 列出所有线程的堆栈信息。 |
-m | 显示每个线程的调用链信息。 |
-F | 强制生成线程快照,即使Java虚拟机进程没有响应。 |
-s | 只显示Java栈帧的信息,不显示本地方法帧的信息。 |
-verbose | 显示更详细的线程信息。 |
Jstack命令的常用用法
- 查看所有线程的堆栈信息
jstack <pid>
- 查看指定线程的堆栈信息
jstack <pid> <thread_id>
- 生成线程快照文件
jstack <pid> > filename
Jstack命令的注意事项
- Jstack命令可能会导致JVM进行短暂的停顿,因此在使用Jstack命令之前,建议先备份Java应用程序的运行状态。
- Jstack命令生成的信息可能比较难以理解,需要具有一定的Java知识才能进行分析。
- Jstack命令是JDK的一部分,因此需要先安装JDK才能使用Jstack命令。
JVM优化之使用Jstack命令查找JVM死锁
JVM优化之使用jstack找出占用cpu最高的线程堆栈信息
Jinfo命令详解
Jinfo(Java Virtual Machine Information)是JDK提供的用于查看Java虚拟机(JVM)配置信息和运行时信息的命令行工具。它可以用于监视JVM的运行状态,并诊断JVM性能问题。
Jinfo基本语法
jinfo [option] <pid>
其中:
- option:指定Jinfo命令的操作。
- <pid>:要分析的Java进程的ID。
如果省略参数,则Jinfo命令将列出所有正在运行的Java进程的ID。
Jinfo命令的常用选项
选项 | 说明 |
---|---|
-help | 显示Jinfo命令的帮助信息。 |
-flags | 显示JVM的命令行参数。 |
-sysprops | 显示系统属性。 |
Jinfo命令的常用用法
- 查看JVM的命令行参数
jinfo -flags <pid>
- 查看系统属性
jinfo -sysprops <pid>
Jstat命令详解
Jstat(Java Virtual Machine Statistics Monitoring Tool)是JDK提供的用于监控Java虚拟机(JVM)运行时状态的命令行工具。它可以用来查看JVM的内存使用情况、垃圾回收情况、类加载情况、编译情况等信息,并可以用于诊断JVM性能问题。
Jstat命令的基本语法
jstat [option] <pid> [interval] [count]
其中:
- option:指定Jstat命令的操作。
- <pid>:要监控的Java进程的ID。
- interval:显示统计信息的时间间隔,单位毫秒。默认值为1000毫秒,即1秒。
- count:要采样的次数。如果省略,则默认采样一次。
Jstat命令的常用选项
选项 | 说明 |
---|---|
-help | 显示Jstat命令的帮助信息。 |
-class | 显示类加载统计信息。 |
-compiler | 显示即时编译器统计信息。 |
-gc | 显示垃圾收集统计信息。 |
-gccapacity | 显示堆容量统计信息。 |
-gcutil | 显示堆使用率统计信息。 |
-hotspot | 显示HotSpot特定统计信息。 |
打印采样的原始数据。 | |
-threads | 显示线程信息。 |
-verbose | 显示更详细的统计信息。 |
Jstat命令的常用用法
- 查看JVM的内存使用情况
jstat -gc <pid>
S0C:第一个幸存区的大小,单位KB
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小(元空间)
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间,单位s
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间,单位s
CGC:并发垃圾回收次数
CGCT:并发垃圾回收次数消耗时间,单位s
GCT:垃圾回收消耗总时间,单位s
- 堆使用率统计
jstat -gcutil <pid>
S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
CGC:并发垃圾回收次数
CGCT:并发垃圾回收次数消耗时间
GCT:垃圾回收消耗总时间
- 堆内存统计
jstat -gccapacity <pid>
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0C:第一个幸存区大小
S1C:第二个幸存区的大小
EC:伊甸园区的大小
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:当前老年代大小
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代GC次数
FGC:老年代GC次数
CGC:并发垃圾回收次数
- 新生代垃圾回收统计
jstat -gcnew <pid>
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
TT:对象在新生代存活的次数
MTT:对象在新生代存活的最大次数
DSS:期望的幸存区大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
- 新生代内存统计
jstat -gcnewcapacity <pid>
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0CMX:最大幸存1区大小
S0C:当前幸存1区大小
S1CMX:最大幸存2区大小
S1C:当前幸存2区大小
ECMX:最大伊甸园区大小
EC:当前伊甸园区大小
YGC:年轻代垃圾回收次数
FGC:老年代回收次数
CGC:并发垃圾回收次数
- 老年代垃圾回收统计
jstat -gcold <pid>
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
OC:老年代大小
OU:老年代使用大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
CGC:并发垃圾回收次数
CGCT:并发垃圾回收次数消耗时间
GCT:垃圾回收消耗总时间
- 老年代内存统计
jstat -gcoldcapacity <pid>
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:老年代大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
CGC:并发垃圾回收次数
CGCT:并发垃圾回收次数消耗时间
GCT:垃圾回收消耗总时间
- 元数据空间统计
jstat -gcmetacapacity <pid>
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
CGC:并发垃圾回收次数
CGCT:并发垃圾回收次数消耗时间
GCT:垃圾回收消耗总时间
Jstat命令的使用技巧
- Jstat命令可以与其他工具一起使用,例如jmap和jstack,来更深入地诊断Java应用程序的性能问题。
- Jstat命令也可以通过脚本或程序来自动运行,以便定期监控Java应用程序的性能。