JVM 性能监控命令行工具

JVM性能监控工具及其参数和查询结果解析

jps:虚拟机进程状况工具

JVM Process Status Tool:显示指定系统内所有的HotSpot虚拟机进程

jps命令格式:jps [options] [hostid]

在这里插入图片描述
jps会列出进程的本地虚拟机唯一ID(Local Virtual Machine Indentifer, LVMID),跟UNIX系统的PID是一致的。

jps也可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI注册表中注册的主机名。

jps参数表

在这里插入图片描述

命令演示

jps -q :只输入LVMID,省略主类的名称

在这里插入图片描述

jps -l:输出主类的全名,如果进程执行的jar包,输出jar的路径

在这里插入图片描述

jps -m:输出虚拟机进程启动时传递给主类main()函数的参数

在这里插入图片描述

jps -v:输出虚拟机进程启动时的JVM参数(标记的地方为IDA中运行main方法时设置的JVM参数)

在这里插入图片描述

jstat :虚拟机统计信息监控工具

JVM StatisticsMonitoring Tool:用于监视虚拟机各种运行状态信息的命令行统计。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,是运行期定位虚拟机性能问题的首选命令行工具。

jstat帮助文档

在这里插入图片描述

命令参数解释

option :由jstat -options命令查询出的多个命令中的一个命令。

vmid:如果是本地虚拟机,那么对应的就是LVMID,如果是远程虚拟机进程,那VMID的格式应当是:
[protocol:][//]lvmid[@hostname[:port]/servername]

interval:统计间隔时间,格式:ms|s,即2ms|2s

count:需要统计的次数,可以跟interval结合使用,如果省略了interval和count,则表示只统计一次。

-J:将直接传递给运行时系统。

命令演示

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
结果解释:(内存单位:KB,都是从应用启动到采样截止的信息)
S0C: 第一个Survivor区总内存
S1C:第二个Survivor区的总内存
S0U:第一个Survivor已使用内存
S1U:第二个Survivor已使用内存
EC : Eden区总内存
EU : Eden区已使用内存
OC: Old区总内存
OU :Old区已使用内存
MC : Metadata区提交内存
MU : Metadata区已使用内存
CCSC:当前压缩类空间的容量
CCSU:当前压缩类空间目前已使用空间
YGC :年轻代GC次数
YGCT:年轻代GC总时间
FGC:Full GC次数
FGCT : Full GC时间
GCT:GC时间

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

在这里插入图片描述
NGCMN:年轻代初始化最小容量
NGCMX:年轻代最大容量
NGC:年轻代当前容量
S0C:第一个Survivor区容量
S1C:第二个Survivor区容量
EC:Eden区容量
OGCMN:老年代初始化最小容量
OGCMX:老年代最大容量
OGC:老年代当前新生成的容量
OC:老年代的容量
MCMN:Metadata的初始化最小容量
MCMX:Metadata的最大容量
MC:Metadata的容量
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:从应用程序启动到采样,年轻代总共发生的GC次数
FGC:从应用程序启动到采样,发生Full GC的次数

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

在这里插入图片描述
S0:第一个Survivor已使用空间占第一个Survivor总空间的百分比
S1:第二个Survivor已使用空间占第二个Survivor总空间的百分比
E:Eden区域已使用空间占Eden区域总空间的百分比
O:Old区域已使用空间占Old区域总空间的百分比
M:Metadata区域已使用空间占Metadata总空间的百分比
CCS:已使用压缩类空间占压缩类总空间的百分比
YGC:从应用程序启动到采样,年轻代发生GC的次数
YGCT:从应用程序启动到采样,年轻代发生GC的时间
FGC:从应用程序启动到采样,发生Full GC的次数
FGCT:从应用程序启动到采样,发生Full GC的时间
GCT:从应用程序启动到采样,总共发生GC的时间=YGCT+FGCT

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

在这里插入图片描述
LGCC:最后一次GC的原因
GCC:当前GC的原因(No GC,表示当前没有GC发生)

-gcnew:监视新生代GC

在这里插入图片描述
TT:持有次数
MTT:最大持有次数
DSS:期望的幸存区大小
其他的内容参考上面的解释。

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

在这里插入图片描述
输出结果解释参考:-gccapacity命令。

-gcold:监视老年代GC状况

在这里插入图片描述
输出结果解释参考:-gc命令。

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

在这里插入图片描述
输出结果解释参考:-gccapacity命令。

-gcmetacapacity:监视metadata用到的最大、最小空间

在这里插入图片描述
输出结果解释参考:-gccapacity命令

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

在这里插入图片描述

-printcompilation:输出JIT编译器编译过的文件大小、类型、方法等信息

在这里插入图片描述
Compiled:编译任务的数目
Size:方法生成的字节码的大小
Type:编译类型
Method:类名和方法名用来标识编译的方法。类名使用/做为一个命名空间分隔符。方法名是给定类中的方法。上述格式是由-XX:+PrintComplation选项进行设置的

jinfo:Java配置信息工具

Configuration Info for Java:实时查看看和调整虚拟机各项参数。
在这里插入图片描述

命令演示

jinfo -flag name pid 命令:(name都是-XX后的参数)打印虚拟机中指定标志及其参数信息

在这里插入图片描述

jinfo -flag [+|-]name pid 命令:应用或取消在虚拟机中的标记

在这里插入图片描述

jinfo -flag name=value pid 命令:设置虚拟机中指定标记的参数

在这里插入图片描述

info -flags pid 命令:只打印虚拟机中的标记信息

在这里插入图片描述

jinfo -sysprops pid 命令:打印Java中的系统属性

在这里插入图片描述

jinfo pid 命令:打印以上所有信息

jmap:Java内存映像工具

Memory Map for Java :命令用于生成对转储快照(一般称为heapdump或dump文件)。也可以使用-XX:+HeapDumpOnOutOfMemoryError参数,让虚拟机在OOM异常出现后自动dump文件,也可以通过-XX:+HeapDumpOnCtrlBreak参数可以使用Ctrl+Break键让虚拟机生成dump文件。(注:生成dump文件会导致虚拟机进程停顿,内存越大停顿时间越长)

在这里插入图片描述

命令演示

jmap -dump:[live,]format=b,file=fileName pid : 生成Java堆转储快照,live参数说明是否只dump存活的对象,format=b表示二进制格式

在这里插入图片描述

jmap -histo[:live] pid:打印Java对象堆的直方图,即打印堆中对象信息统计信息,包括类、实例数量、合计容量。live参数表示是否只打印存活的对象信息

在这里插入图片描述

jmap -finalizerinfo pid :显示在F-Queue中等待Finalizer线程执行finalize方法的对象

在这里插入图片描述

jmap -heap pid : 打印Java堆详细信息,如使用哪种回收期、参数配置、分代状况等

在这里插入图片描述
接续上图
在这里插入图片描述

jmap -clstas pid : 打印类装载统计信息

在这里插入图片描述

jmap -F [-dump:format=b,file=filename]|[-histo] pid : 当pid无没有响应时,与-dump或-histo连用,强制堆转储或打印堆对象统计信息,dump中live不能使用

在这里插入图片描述
接续上图
在这里插入图片描述

jhat:虚拟机堆转储快照分析工具

JVM Heap Analysis Tool : 该命令与jmap搭配使用,分析jmap生成的堆转储快照。一般不建议直接使用jhat命令来分析dump文件,主要原因:
第一:分析dump文件不仅耗时而且消耗硬件资源,即使要做也会复制到其他机器上,因为家在dump快照文件需要比dump更大的内存,所以一般在64位JDK、大内存服务器上运行;
第二:jhat分析功能相对比较简陋。
在这里插入图片描述

命令演示

jhat file:分析dump文件

在这里插入图片描述
访问上图分析结果:
在这里插入图片描述

jstack:Java堆栈跟踪工具

Stack Track for Java : 用于生成虚拟机当前时刻的线程快照(一般为threaddump或者javacore文件)。
在这里插入图片描述

命令演示

jstack pid : 打印虚拟机当前时刻线程快照

在这里插入图片描述

jstack -l pid : 除堆栈外,显示关于锁的附加信息

在这里插入图片描述
接续上图
在这里插入图片描述
接续上图
在这里插入图片描述

jstack -m pid : 如果调用到本地方法的话,可以显示C/C++的堆栈

在这里插入图片描述
接续上图
在这里插入图片描述

jstatck -F pid : 当正常的jstack pid没有响应时,强制生成线程快照

在这里插入图片描述

HSDIS:JIT生成代码反汇编

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值