JVM优化之JDK命令

本文将从以下命令或工具进行记录,本文章将持续补充

  1. Jmap
  2. Jstack
  3. Jinfo
  4. Jstat

Jmap命令详解

Jmap(Java Virtual Machine Memory Map)是JDK提供的用于生成Java虚拟机堆转储快照dump文件的命令行工具。它可以用于分析Java应用程序的内存使用情况,并诊断JVM性能问题。
jmap  helo命令提示

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>

JVM堆的使用情况

  • 查看对象的分布情况
jmap -histo <pid>

jvm对象的分布情况

  1. num:序号
  2. instances:实例数量
  3. bytes:占用空间大小
  4. 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:

  1. live
    仅转储活动对象;如果未指定,则转储堆中的所有对象。
  2. format=b
    二进制格式
  3. file=<file>
    将堆转储到<file>
    生成堆转储快照文件

也可以设置内存溢出自动导出dump文件(内存很大的时候,可能会导不出来)

  1. -XX:+HeapDumpOnOutOfMemoryError
  2. -XX:HeapDumpPath=./ (路径)

Jmap命令的注意事项

  • Jmap命令可能会导致JVM进行垃圾回收,因此在使用Jmap命令之前,建议先备份Java应用程序的运行状态。
  • Jmap命令生成的堆转储快照文件可能非常大,因此在生成堆转储快照文件之前,需要确保有足够的磁盘空间。
  • Jmap命令是JDK的一部分,因此需要先安装JDK才能使用Jmap命令。

Jstack命令详解

Jstack(Java Virtual Machine Stack Dump)是JDK提供的用于生成Java虚拟机线程堆栈快照的命令行工具。它可以用于分析Java应用程序的线程状态,并诊断JVM性能问题。
jstack help提示

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  helo命令提示

Jinfo基本语法

jinfo [option] <pid>

其中:

  • option:指定Jinfo命令的操作。
  • <pid>:要分析的Java进程的ID。
    如果省略参数,则Jinfo命令将列出所有正在运行的Java进程的ID。

Jinfo命令的常用选项

选项说明
-help显示Jinfo命令的帮助信息。
-flags显示JVM的命令行参数。
-sysprops显示系统属性。

Jinfo命令的常用用法

  • 查看JVM的命令行参数
jinfo -flags <pid>

查询启动时指定的JVM参数

  • 查看系统属性
jinfo -sysprops <pid>

系统属性

Jstat命令详解

Jstat(Java Virtual Machine Statistics Monitoring Tool)是JDK提供的用于监控Java虚拟机(JVM)运行时状态的命令行工具。它可以用来查看JVM的内存使用情况、垃圾回收情况、类加载情况、编译情况等信息,并可以用于诊断JVM性能问题。
jstat help命令提示

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特定统计信息。
-print打印采样的原始数据。
-threads显示线程信息。
-verbose显示更详细的统计信息。

Jstat命令的常用用法

  • 查看JVM的内存使用情况
jstat -gc <pid>

jstat gc日志

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>

jstat gcutil日志

S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
CGC:并发垃圾回收次数
CGCT:并发垃圾回收次数消耗时间
GCT:垃圾回收消耗总时间

  • 堆内存统计
jstat -gccapacity <pid>

jstat gccapacity日志

NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0C:第一个幸存区大小
S1C:第二个幸存区的大小
EC:伊甸园区的大小
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:当前老年代大小
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代GC次数
FGC:老年代GC次数
CGC:并发垃圾回收次数

  • 新生代垃圾回收统计
jstat -gcnew <pid>

jstat gcnew命令

S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
TT:对象在新生代存活的次数
MTT:对象在新生代存活的最大次数
DSS:期望的幸存区大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间

  • 新生代内存统计
jstat -gcnewcapacity <pid>

jstat gcnewcapacity命令

NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0CMX:最大幸存1区大小
S0C:当前幸存1区大小
S1CMX:最大幸存2区大小
S1C:当前幸存2区大小
ECMX:最大伊甸园区大小
EC:当前伊甸园区大小
YGC:年轻代垃圾回收次数
FGC:老年代回收次数
CGC:并发垃圾回收次数

  • 老年代垃圾回收统计
jstat -gcold <pid>

jstat gcold命令

MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
OC:老年代大小
OU:老年代使用大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
CGC:并发垃圾回收次数
CGCT:并发垃圾回收次数消耗时间
GCT:垃圾回收消耗总时间

  • 老年代内存统计
jstat -gcoldcapacity <pid>

jstat gcoldcapacity命令

OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:老年代大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
CGC:并发垃圾回收次数
CGCT:并发垃圾回收次数消耗时间
GCT:垃圾回收消耗总时间

  • 元数据空间统计
jstat -gcmetacapacity <pid>

jstat gcmetacapacity命令

MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
CGC:并发垃圾回收次数
CGCT:并发垃圾回收次数消耗时间
GCT:垃圾回收消耗总时间

Jstat命令的使用技巧

  • Jstat命令可以与其他工具一起使用,例如jmap和jstack,来更深入地诊断Java应用程序的性能问题。
  • Jstat命令也可以通过脚本或程序来自动运行,以便定期监控Java应用程序的性能。

JVM优化之使用Jstat命令预估JVM运行情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值