jvm性能调优与监控之---jstat

简介:

jstat(JVM Statistics Monitoring Tool):jvm统计监控工具

使用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程(需要远程主机提供RMI支持)虚拟机进程中的类信息、内存、垃圾收集、JIT编译等运行数据,在没有GUI,只提供了纯文本控制台环境的服务器上,它将是运行期间定位虚拟机性能问题的首选工具。

jstat命令格式

jstat [ option vmid [ interval [ s | ms ] [ count ] ] ]

这个VMID,对于本地虚拟机进程而言,VMID和LVMID是一致的。参数interval和count分别表示查询间隔和次数,如果省略这两个参数,说明只查询一次,假设需要每200毫秒查询一次进程3596的垃圾收集情况,一共查询20次,那命令应当是:
这里写图片描述
jstat主要选项

-class                监视类装载、卸载数量、总空间以及类装载所耗费的时间
-gc                    监视Java堆状况,包括Eden区、两个Survivor区、、老年代、永久带等的容量、已用空间、GC时间合计等信息
-gccapacity            监视内容基本与-gc相同,但输出主要关注Java堆各个区域使用到的最大、最小空间
-gcutil                监视内容基本与-gc相同,但输出主要关注已使用的空间占总空间的百分比
-gccause            与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因
-gcnew                监视新生代GC状况
-gcnewcapacity        监视内容基本与-gcnew相同,但输出主要关注使用到的最大、最小空间
-gcold                监视老年代GC状况
-gcoldcapacity        监视内容基本与-gcold相同,但输出主要关注使用到的最大、最小空间
-gcpermcapacity        输出永久代使用到的最大、最小空间
-compiler            输出JIT编译器编译过的方法、耗时等信息
-printcompilation    输出已经被JIT编译的方法

例子

这里的4596,我是通过jps查询

监视类装载、卸载数量、总空间以及类装载所耗费的时间

jstat -class 4596

这里写图片描述

监视类装载数量:8951
总空间:16830.2字节
卸载数量:0
类装载所耗费的时间:6.45秒

监视Java堆状况,包括Eden区、两个Survivor区、、老年代、永久带等的容量、已用空间、GC时间合计等信息

jstat -gc 4596

这里写图片描述

S0C:(young gerenation中的from survivor)的总容量:19456.0(字节)
S1C:(young gerenation中的to survivor)的总容量:17408.0(字节)
S0U:(young gerenation中的from survivor)已经使用的容量:0.0(字节)
S1U:(young gerenation中的to survivor)已经使用的容量:17169.6(字节)
EC:(young gerenation中的eden)的总容量:360448.0(字节)
EU:(young gerenation中的eden)已经使用的容量:35731.5(字节)
OC:(old gerenation)的总容量:152576.0(字节)
OU:(old gerenation)已经使用的容量:24333.3(字节)
MC:(method area)的总容量:47192.0(字节)
MU:(method area)已经使用的容量:46250.0(字节)
CCSC:压缩类总容量:6242.0(字节)
CCSU:压缩类已经使用容量:6232.0(字节)
YGC:(young generation)发生GC次数:9
YGCT:(young generaton)发生GC使用时间:0.126秒
FGC:(Full GC)次数:2
FGCT:(Full GC)耗时:0.151
GCT:总GC耗时:0.277

监视内容基本与-gc相同,但输出主要关注Java堆各个区域使用到的最大、最小空间

jstat -gccapacity

这里写图片描述

NGCMN:新生代最小容量:86016.0byte
NGCMX:新生代最大容量:1372672.0byte
NGC:当前新生代容量:418307.0byte
S0C:第一个幸存区大小19456.0byte
S1C:第二个幸存区的大小17408.0byte
EC:eden区的大小:360448.0byte
OGCMN:老年代最小容量:172032.0byte
OGCMX:老年代最大容量2745856.0byte
OGC:当前老年代大小152576.0byte
OC:当前老年代大小152576.0byte
MCMN:最小元数据容量0.0byte
MCMX:最大元数据容量1089536.0byte
MC:当前元数据空间大小47192.0byte
CCSMN:最小压缩类空间大小:0.0byte
CCSMX:最大压缩类空间大小1048576.0byte
CCSC:当前压缩类空间大小6232.0byte
YGC:年轻代gc次数:9
FGC:老年代GC次数:2

监视内容基本与-gc相同,但输出主要关注已使用的空间占总空间的百分比

jstat -gcutil 4596

这里写图片描述

新生代Eden区(E,表示Eden)使用了9.25%的空间;
两个Survivor区:
S0表示Survivor0:0.00%
S1表示Survivor1:98.63%
O,表示Old(老年代):15.95%
程序运行以来共发生Minor GC(YGC,表示Young GC)9次,总共耗时0.126秒;
共发生Full GC(FGC,表示Full GC)2次,Full GC共耗时(FGCT,Full GC Time)为0.151秒,
所有GC总耗时(GCT,表示GC Time)0.27秒

与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因

jstat -gccause 4596

这里写图片描述

S0:(young generation中的from survivor)占用比例
S1:(young generation中的to survivor)占用比例
E:(young generation中的eden)占用比例
O:(old generation)占用比例
M:(method area)占用比例
CCS:压缩类占用比例
YGC:young gc次数:9
YGCT:young gc time:0.126
FGC:full gc:2
FGCT:full gc time:0.151
GCT:gc time:0.277
LGCC:最近垃圾回收的原因
GCC:当前垃圾回收的原因

监视新生代GC状况

jstat -gcnew -4596

这里写图片描述

S0C:(young generation的from survivor)总容量19456.0byte
S1C:(young generation的to survivor)总容量17408.0byte
S0U:(young generation的from survivor)已经使用0.0byte
S1U:(young generation的to survivor)已经使用17169.6byte
TT:Tenuring threshold(提升阈值)
MTT:最大的tenuring threshold
DSS:survivor区域大小 (KB)
EC:(young generation的eden)总容量360448.0byte
YGC:(young generation发生gc次数):9
YGCT:(young generation发生gc耗时):0.126

监视内容基本与-gcnew相同,但输出主要关注使用到的最大、最小空间

jstat -gcnewcapacity 4596

这里写图片描述

NGCMN:新生代占用最小容量86016.0byte
NGCMX:新生代占用最大容量1372672.0byte
NGC:新生代当前容量418304.0byte
S0CMX:最大的S0空间 457216.0byte
S0C:当前S0空间19456.0byte
S1CMX:最大S1空间457216.0byte
S1C:当前S1空间17408.0byte
ECMX:最大eden空间1371648.0byte
EC:当前eden空间360448.0byte
YGC:young gc次数9
FGC:full gc次数2

监视老年代GC状况

jstat -gcold 4596

这里写图片描述

MC:当前方法区容量47192.0byte
MU:当前方法区已经使用容量46250.0byte
CCSC:压缩类空间容量6232.0byte
CCSU:压缩类空间已使用容量5994.7byte
OC:当前老年代容量152576.0byte
OU:当前老年代已使用容量24333.3byte
YGC:young gc次数9
FGC:full gc次数2
FGCT:full gc time:0.151
GCT:gc time:0.277

监视内容基本与-gcold相同,但输出主要关注使用到的最大、最小空间

jstat -gcoldcapacity 4596

这里写图片描述

OGCMN:old区最小容量172032.0byte
OGCMX:old区最大容量2745856.0byte
OGC:old当前容量152576.0byte
OC:old当前容量152576.0byte
YGC:young generation发生gc次数:9
FGC:full gc发生gc次数:2
FGCT:full gc time:0.151
GCT:GC time:0.277

输出JIT编译器编译过的方法、耗时等信息

jstat -compiler 4596

这里写图片描述

Compiled:编译方法的数量:5528
Failed:编译方法失败的数量:7
Invalid:编译方法不可用的数量:0
Time:编译方法的耗时1.90秒
FailedType:编译方法失败类型:1
FailedMethod:编译失败的方法:org/springframework/beans/factory/support/ConstructorResolver instantiateUsingFactoryMethod

输出已经被JIT编译的方法

jstat -printcompilation 4596

这里写图片描述

Compiled:最近编译方法的数量:5528
Size:最近编译方法的字节码数量:83
Type:最近编译方法的编译类型:1
Method:方法名标识:org/apache/tomcat/util/collections/ManagedConcurrentWeakhashMap maintain

jstat - Java Virtual Machine Statistics Monitoring Tool

目录
相关文章
|
2天前
|
监控 Java
jstat命令如何查看JVM垃圾回收情况
jstat命令如何查看JVM垃圾回收情况
6 1
|
12天前
|
缓存 监控 Java
Java虚拟机(JVM)性能调优实战指南
在追求软件开发卓越的征途中,Java虚拟机(JVM)性能调优是一个不可或缺的环节。本文将通过具体的数据和案例,深入探讨JVM性能调优的理论基础与实践技巧,旨在为广大Java开发者提供一套系统化的性能优化方案。文章首先剖析了JVM内存管理机制的工作原理,然后通过对比分析不同垃圾收集器的适用场景及性能表现,为读者揭示了选择合适垃圾回收策略的数据支持。接下来,结合线程管理和JIT编译优化等高级话题,文章详细阐述了如何利用现代JVM提供的丰富工具进行问题诊断和性能监控。最后,通过实际案例分析,展示了性能调优过程中可能遇到的挑战及应对策略,确保读者能够将理论运用于实践,有效提升Java应用的性能。 【
54 10
|
10天前
|
监控 算法 Java
深入理解Java虚拟机:JVM调优的实用策略
在Java应用开发中,性能优化常常成为提升系统响应速度和处理能力的关键。本文将探讨Java虚拟机(JVM)调优的核心概念,包括垃圾回收、内存管理和编译器优化等方面,并提供一系列经过验证的调优技巧。通过这些实践指导,开发人员可以有效减少延迟,提高吞吐量,确保应用稳定运行。 【7月更文挑战第16天】
|
6天前
|
JSON Java BI
一次Java性能调优实践【代码+JVM 性能提升70%】
这是我第一次对系统进行调优,涉及代码和JVM层面的调优。如果你能看到最后的话,或许会对你日常的开发有帮助,可以避免像我一样,犯一些低级别的错误。本次调优的代码是埋点系统中的报表分析功能,小公司,开发结束后,没有Code Review环节,所以下面某些问题,也许在Code Review环节就可以避免。
62 0
一次Java性能调优实践【代码+JVM 性能提升70%】
|
15天前
|
监控 算法 Java
深入探索Java虚拟机:性能监控与调优实践
在面对日益复杂的企业级应用时,Java虚拟机(JVM)的性能监控和调优显得尤为重要。本文将深入探讨JVM的内部机制,分析常见的性能瓶颈,并提供一系列针对性的调优策略。通过实际案例分析,我们将展示如何运用现代工具对JVM进行监控、诊断及优化,以提升Java应用的性能和稳定性。
|
16天前
|
缓存 Prometheus 监控
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
34 3
|
16天前
|
存储 算法 Java
Java面试题:深入探究Java内存模型与垃圾回收机制,解释JVM中堆内存和栈内存的主要区别,谈谈对Java垃圾回收机制的理解,Java中的内存泄漏及其产生原因,如何检测和解决内存泄漏问题
Java面试题:深入探究Java内存模型与垃圾回收机制,解释JVM中堆内存和栈内存的主要区别,谈谈对Java垃圾回收机制的理解,Java中的内存泄漏及其产生原因,如何检测和解决内存泄漏问题
24 0
|
16天前
|
存储 算法 安全
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
25 0
|
2天前
|
Java
JVM堆内存是由哪几个区域组成的
JVM堆内存是由哪几个区域组成的
|
5天前
|
Java Windows
为什么JVM在内存返还策略上会左右为难
为什么JVM在内存返还策略上会左右为难?