JVM中监控工具功能详解(上)--jps、jstat

JVM中性能调优工具功能详解(上)

本文章内容基于jdk1.8进行讲解



一、jps

jps(JavaVirtual Machine Process Status Tool)它将打印所有正在运行的 Java 进程的相关信息。在默认情况下,jps的输出信息包括 Java 进程的进程 ID 以及主类名。我们还可以通过追加参数,来打印额外的信息。

jps

在这里插入图片描述

jps -q 打印启动java程序的进程号

在这里插入图片描述

jps –l:输出主类或者jar的完全路径名

在这里插入图片描述
jps –v :输出jvm参数
在这里插入图片描述

jps –m :输出main method的参数
在这里插入图片描述
结合使用 jps -mlv
在这里插入图片描述

二、jstat

jstat(Java Virtual Machine statistics monitoring tool)允许用户查看目标 Java 进程的类加载、即时编译以及垃圾回收相关的信息。它常用于检测垃圾回收问题以及内存泄漏问题。

我们可以通过jstat -options命令来查看可以检测的区域
在这里插入图片描述

class类加载器的统计信息
compilerJIT(即时编译器) 的统计信息
gcGC管理堆的统计信息
gccapacity堆内存容量统计
gccause垃圾收集统计信息的摘要(与-gcutil相同),包括上一次和当前(如果适用)垃圾收集事件的原因
gcmetacapacity元空间信息统计
gcnew新生代信息统计
gcnewcapacity新生代信息统计及内存使用情况
gcold统计老年代和元空间使用情况
gcoldcapacity统计老年代内存使用情况
gcutil垃圾回收统计
printcompilationHotspot方法编译统计情况

jstat 命令格式

jstat [-options] [pid] [间隔时间/默认单位是毫秒] [查询次数]

jstat -class --类加载器的统计信息
在这里插入图片描述

Loaded加载class的数量
Bytes所占空间的大小(KB)
Unloaded未加载数量
Bytes未加载占用空间(KB)
Time执行类加载和卸载操作所花费的时间

jstat -compiler --JIT(即时编译器) 的统计信息
在这里插入图片描述

Compiled执行的编译任务数
Failed失败编译的任务数
Invalid无效的编译任务数
Time执行编译任务所花时间
FailedType上次失败编译的编译类型
FailedMethod上次编译失败的类名和方法

jstat -gc --GC管理堆的统计信息
在这里插入图片描述

S0C当前第一个幸存区空间容量的大小(KB)
S1C当前第二个幸存区空间容量的大小(KB)
S0U第一个幸存区空间的使用大小(KB)
S1U第二个幸存区空间的使用大小(KB)
EC当前eden区空间容量(KB)
EU当前eden空间使用大小(KB)
0C当前老年代空间容量(KB)
0U老年代空间使用大小(KB)
MC元空间容量(KB)
MU元空间使用大小(KB)
CCSC压缩类空间大小(KB)
CCSU已使用的压缩类空间(kB)
YGC年轻代垃圾回收次数
YGCT年轻代垃圾回收消耗时间
FGC老年代垃圾回收次数
FGCT老年代垃圾回收消耗时间
GCT垃圾回收消耗总时间
[压缩类空间指的是被压缩指针所指向的空间,默认大小1G,可以通过CompressedClassSpaceSize调整] 

jstat -gccapacity --堆内存容量统计
在这里插入图片描述

NGCMN新生代最小容量(KB)
NGCMX新生代最大容量(KB)
NGC当前新生代容量(KB)
S0C当前第一个幸存区空间容量的大小(KB)
S1C当前第二个幸存区空间容量的大小(KB)
EC当前eden区空间容量(KB)
OGCMN老年代最小容量(KB)
OGCMX老年代最大容量(KB)
OGC当前老年代容量(KB)
OC当前老年代容量(KB)
MCMN最小元数据容量(KB)
MCMX最大元数据容量(KB)
MC当前元数据空间大小(KB)
CCSMN最小压缩类空间大小(KB)
CCSMX最大压缩类空间大小(KB)
CCSC当前压缩类空间大小(KB)
YGC年轻代gc次数
FGC老年代gc次数

jstat -gccause --垃圾收集统计信息的摘要(与-gcutil相同),包括上一次和当前(如果适用)垃圾收集事件的原因。
在这里插入图片描述

S0第一个辛存区的使用空间占当前容量的百分比
S1第二个辛存区的使用空间占当前容量的百分比
E伊甸区已用空间占当前容量的百分比
O老年代已用空间占当前容量的百分比
M元空间已用空间占当前容量的百分比
CCS以百分比表示的压缩类空间利用率
YGC年轻代垃圾回收次数
YGCT年轻代垃圾回收消耗时间
FGC老年代垃圾回收次数
FGCT老年代垃圾回收消耗时间
GCT垃圾回收消耗总时间
LGCC上次垃圾回收的原因
GCC当前垃圾回收的原因

jstat -gcmetacapacity --元空间信息统计
在这里插入图片描述

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

jstat -gcnew --新生代信息统计
在这里插入图片描述

S0C第一个幸存区大小(KB)
S1C第二个幸存区的大小(kB)
S0U第一个幸存区空间的使用大小(KB)
S1U第二个幸存区空间的使用大小(KB)
TT对象在新生代存活的次数
MTT对象在新生代存活的最大次数
DSS期望的幸存区大小(KB)
EC当前伊甸区空间容量(KB)
EU伊甸空间利用率(KB)
YGC年轻代GC次数
YGCT年轻代垃圾回收消耗时间

jstat -gcnewcapacity --新生代信息统计及内存使用情况
在这里插入图片描述

NGCMN新生代最小容量(KB)
NGCMX新生代最大容量(KB)
NGC当前新生代容量(KB)
S0CMX第一个幸存区最大大小(KB)
S0C当前第一个幸存区大小(KB)
S1CMX第二个幸存区最大大小(KB)
S1C当前第二个幸存区大小(KB)
ECMX最大伊甸区大小(KB)
EC当前伊甸园区大小(KB)
YGC年轻代垃圾回收次数
FGC老年代回收次数

jstat -gcold --统计老年代和元空间使用情况在这里插入图片描述

MC元空间容量(KB)
MU元空间使用大小(KB)
CCSC压缩类空间大小(KB)
CCSU压缩类空间使用大小(KB)
OC老年代大小(KB)
OU老年代使用大小(KB)
YGC年轻代垃圾回收次数
FGC老年代垃圾回收次数
FGCT老年代垃圾回收消耗时间
GCT垃圾回收消耗总时间

jstat -gcoldcapacity --统计老年代内存使用情况在这里插入图片描述

OGCMN老年代最小容量 (KB)
OGCMX老年代最大容量(KB)
OGC当前老年代大小(KB)
OC老年代大小(KB)
YGC年轻代垃圾回收次数
FGC老年代垃圾回收次数
FGCT老年代垃圾回收消耗时间
GCT垃圾回收消耗总时间

jstat -printcompilation --Hotspot方法编译统计情况在这里插入图片描述

Compiled最近编译方法的数量
Size最近编译方法的字节码数量
Type最近编译方法的编译类型
Method类名和方法名,用于标识最近编译的方法。类名使用斜杠(/)而不是点(.)作为名称空间分隔符。方法名是指定类中的方法。这两个字段的格式与HotSpot-XX:+printcomilation选项一致。

当使用 G1 GC 时,Java 虚拟机不再设置 Eden 区、Survivor 区,老年代区的内存边界,而是将堆划分为若干个等长内存区域。每个内存区域都可以作为 Eden 区、Survivor 区以及老年代区中的任一种,并且可以在不同区域类型之间来回切换。

换句话说,逻辑上我们只有一个 Survivor 区。当需要迁移 Survivor 区中的数据时(即 Copying GC),我们只需另外申请一个或多个内存区域,作为新的 Survivor 区。因此,Java 虚拟机决定在使用 G1 GC 时,将所有 Survivor 内存区域的总容量以及已使用量存放至 S1C 和 S1U 中,而 S0C 和 S0U 则被设置为 0。当发生垃圾回收时,Java 虚拟机可能出现 Survivor 内存区域内的对象全被回收或晋升的现象。在这种情况下,Java 虚拟机会将这块内存区域回收,并标记为可分配的状态。这样子做的结果是,堆中可能完全没有 Survivor 内存区域,因而相应的 S1C 和 S1U 将会是 0。

jstat还可以用来判断是否出现内存泄漏。在长时间运行的 Java 程序中,我们可以运行jstat命令连续获取多行性能数据,并取这几行数据中 OU 列(即已占用的老年代内存)的最小值。然后,我们每隔一段较长的时间重复一次上述操作,来获得多组 OU 最小值。如果这些值呈上涨趋势,则说明该 Java 程序的老年代内存已使用量在不断上涨,这意味着无法回收的对象在不断增加,因此很有可能存在内存泄漏。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JVM调优工具命令详解》是一份预习资料,主要介绍了Java虚拟机(JVM)调优过程使用的一些工具命令。这些工具命令可以帮助开发人员诊断和优化JVM的性能问题。 文首先介绍了常用的JVM调优工具命令,包括jpsjstat、jinfo、jmap、jhat等。这些命令可以用于查看JVM进程信息、统计JVM内存和线程情况、获取JVM配置参数等。通过使用这些工具命令,开发人员可以快速定位JVM性能瓶颈所在,进行优化。 接下来,文详细介绍了每个工具命令的使用方法和参数解释。例如,jstat命令可以用于查看JVM内存情况,包括堆内存使用量、垃圾回收情况等。而jmap命令可以用于生成堆内存转储文件,帮助开发人员分析内存泄漏问题。通过掌握这些工具命令的使用,开发人员可以更加高效地进行JVM调优。 此外,文还介绍了一些实际的调优案例,通过使用这些工具命令来解决实际的JVM性能问题。这些案例包括内存泄漏、线程死锁、CPU占用过高等问题。通过学习这些案例,开发人员可以更好地理解如何利用工具命令来诊断和解决JVM性能问题。 总的来说,《JVM调优工具命令详解》是一份非常实用的预习资料,适合那些需要深入学习JVM性能优化的开发人员。通过学习和掌握这些工具命令,开发人员能够更加高效地进行JVM调优,提升应用程序的性能和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值