JVM常用分析工具

目录

 

JVM常用分析工具

jps

jstat

jstat英文标头释义

jmap

MAT

jstack

jconsole

jvisualvm


JVM常用分析工具

JDK的bin目录中有“java.exe”、 “javac.exe”这两个命令行工具,但bin目录之中还有很多其他命令行程序,这些工具非常强大可以用于监视虚拟机和故障处理。

 

工具名称

 

作用描述

 

jps.exe

 

JVM进程状态工具(JVM Process Status Tool),用于显示目标系统上JVM的Java进程信息。

 

jstat.exe

 

JVM统计监测工具(JVM Statistics Monitoring Tool),主要用于监测并显示JVM的性能统计信息。

 

jinfo.exe

 

Java配置信息工具(Java Configuration Information),用于打印指定Java进程、核心文件或远程调试服务器的配置信息。

 

jhat.exe

 

Java堆分析工具(Java Heap Analysis Tool),用于分析Java堆内存中的对象信息。

 

jmap.exe

 

Java内存映射工具(Java Memory Map),主要用于打印指定Java进程、核心文件或远程调试服务器的共享对象内存映射或堆内存细节。

 

jstack.exe

 

Java堆栈跟踪工具,主要用于打印指定Java进程、核心文件或远程调试服务器的Java线程的堆栈跟踪信息。

 

jmc.exe

 

Java任务控制工具(Java Mission Control),主要用于JVM的生产时间监测、分析、诊断。

 

jvisualvm.exe

 

JVM监测、故障排除、分析工具,主要以图形化界面的方式提供运行于指定虚拟机的Java应用程序的详细信息。

 

jconsole.exe

 

图形化用户界面的监测工具,主要用于监测并显示运行于Java平台上的应用程序的性能和资源占用等信息。

 

jps

显示正在运行的虚拟机进程

jps 4562

可选参数:

  • -q 只显示LVMID,省略主类信息(LVMID:本地虚拟机进程唯一编号)

  • -l 显示虚拟机启动进程时传递给main()的参数

  • -m 显示类全面,如果是jar包显示jar路径

  • -v 显示虚拟机启动时候的JVM参数

jstat

显示本地或者远程虚拟机进程中的类装载、 内存、 垃圾收集、 JIT编译等运行数据。是定位虚拟机性能问题的首选工具。该命令有多个常用参数:

 

命令选项

 

描述

 

-class

 

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

 

-compiler

 

显示JIT编译器编译过的方法、耗时等信息

 

-gc

 

统计Java堆,包括Eden、Survivor、老年代、永久代的容量,已用空间、GC时间等信息

 

-gccapacity

 

显示Java堆各个区域使用到的最大、最小空间

 

-gcutil

 

显示已使用空间占总空间的百分比

 

-gccause

 

垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因

 

-gcnew

 

新生代行为统计

 

-gcnewcapacity

 

新生代使用到的最大、最小空间统计

 

-gcold

 

统计老年代GC状况

 

-gcoldcapacity

 

年老代行为统计(同-gcoldcapacity),主要关注使用到的最大、最小空间

 

-gcpermcapacity

 

显示永久代使用到的最大、最小空间(-gcmetacapacity)

 

-printcompilation

 

显示已经被JIT编译的方法

class

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

$ jstat -class 4562

显示标头含义:

 

Bytes

 

class字节大小

 

Unloaded

 

未加载class的数量

 

Bytes

 

未加载class的字节大小

 

Time

 

加载时间

compiler

输出JIT编译过的方法数量耗时等

$ jstat -compiler 4562

显示标头含义:

 

Failed

 

编译失败数量

 

Invalid

 

无效数量

 

Time

 

编译耗时

 

FailedType

 

失败类型

 

FailedMethod

 

失败方法的全限定名

gc

垃圾回收堆的行为统计

jstat -gc 4562

gccapacity

同-gc,还会输出Java堆各区域使用到的最大、最小空间

jstat -gccapacity 4562

gcutil

同-gc,输出的是已使用空间占总空间的百分比

jstat -gcutil 4562

gccause

垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因

jstat -gccause 4562

gcnew

统计新生代行为信息

jstat -gcnew 4562

gcnewcapacity

新生代与其相应的内存空间的统计

jstat -gcnewcapacity 4562

gcold

统计老年代行为

jstat -gcold 4562

gcoldcapacity

老年代与其相应的内存空间的统计

jstat -gcoldcapacity 4562

gcpermcapacity

永久代与其相应内存空间的统计。

jstat -gcnewcapacity 4562

JDK 1.8及之后的版本,该参数位-gcmetacapacity

printcompilation

显示hotspot编译方法统计

jstat -gcnewcapacity 4562

显示标头含义:

 

Compiled

 

最近编译方法的数量

 

Type

 

最近编译方法的编译类型

 

Size

 

最近编译方法的字节码数

 

Method

 

编译方法的类名和方法名。类名使用"/" 代替 "." 作为空间分隔符。方法名是给出类的方法名。格式和HotSpot - XX:+PrintComplation 选项一致。

jstat英文标头释义

 

 

英文标头

 

含义

 

NGC

 

当前新生代容量 (KB)

 

NGCMN

 

新生代最小容量

 

NGCMX

 

新生代最大容量

 

S0

 

幸存区S0当前使用比例

 

S0C

 

当前幸存区S0空间 (KB)

 

S0U

 

第一个幸存区的使用大小

 

S0CMX

 

最大幸存区S0大小 (KB)

 

S1

 

幸存区S1当前使用比例

 

S1C

 

当前幸存区S1大小

 

S1U

 

第二个幸存区的使用大小

 

S1CMX

 

最大幸存区S1大小

 

E

 

Eden区使用比例

 

EC

 

当前Eden空间 (KB)

 

EU

 

Eden区的使用大小

 

ECMX

 

最大Eden区空间 (KB)

 

TT

 

对象在新生代存活的次数Tenuring threshold(提升阈值)

 

MTT

 

对象在新生代存活的最大次数,最大的tenuring threshold

 

DSS

 

期望的幸存区大小,survivor区域大小 (KB)

 

PC

 

Perm大小(JDK1.8之前)

 

PU

 

Perm使用大小(JDK1.8之前)

 

PGCMN

 

Perm占用的最小空间(JDK1.8之前)

 

PGCMX

 

Perm占用的最大空间(JDK1.8之前)

 

PGC

 

Perm空间 (KB)(JDK1.8之前)

 

M

 

元数据区使用比例(JDK1.8之后)

 

MC

 

方法区大小(JDK1.8之后)

 

MU

 

方法区使用大小(JDK1.8之后)

 

MCMN

 

最小元数据容量(JDK1.8之后)

 

MCMX

 

最大元数据容量(JDK1.8之后)

 

O

 

老年代使用比例

 

OC

 

当前年老代的空间 (KB)

 

OU

 

老年代使用大小

 

OGC

 

当前年老代的容量 (KB)

 

OGCMN

 

老年代最小容量

 

OGCMX

 

老年代最大容量

 

CCS

 

压缩使用比例(JDK1.8之后)

 

CCSC

 

压缩类空间大小(JDK1.8之后)

 

CCSU

 

压缩类空间使用大小(JDK1.8之后)

 

CCSMN

 

最小压缩类空间大小(JDK1.8之后)

 

CCSMX

 

最大压缩类空间大小(JDK1.8之后)

 

YGC

 

年轻代垃圾回收次数

 

YGCT

 

年轻代垃圾回收消耗时间

 

FGC

 

老年代垃圾回收次数

 

FGCT

 

老年代垃圾回收消耗时间

 

GCT

 

垃圾回收消耗总时间

 

jmap

用于生成heap dump文件,如果不使用这个命令,还可以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现OOM的时候自动生成dump文件。 jmap不仅能生成dump文件,还可以查询finalize执行队列、Java堆和永久代的详细信息,如当前使用率、当前使用的是哪种收集器等。

# 显示堆中对象的统计信息,包括类、有多少个实例,合计容量等
$ jmap -histo 4562
$ jmap -histo:live 4562

# 生成Java堆快照。格式:-dump:[live, ]format=b, file=<filename>
# live为是否只生成存活的对象
$ jmap -dump:file=4562.hprof

# 显示堆详细信息,如使用哪种回收器、参数配置、分代状况等
$ jmap -heap 4562

# 打印类加载统计信息
$ jmap -clstats 4562

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

MAT

是一种快速且功能丰富的Java堆分析器,可帮助你查找内存泄漏并减少内存消耗。 使用MAT可以分析包含数亿个对象的高效堆转储,快速计算对象的大小,查看阻止垃圾收集器收集对象的原因,运行报告并自动提取可疑泄漏。

当我们需要处理hprof文件对象转储文件,分析内存相关问题时,MAT绝对是不二之选。 MAT可以作为一个独立分析工具使用,也可以通过Eclipse下载插件结合使用。

项目主页:https://www.eclipse.org/mat/

https://projects.eclipse.org/projects/tools.mat

使用入门:https://wiki.eclipse.org/MemoryAnalyzer

参考文档:https://help.eclipse.org/2019-12/index.jsp?topic=/org.eclipse.mat.ui.help/welcome.html

下载地址:https://www.eclipse.org/mat/downloads.php

jstack

用于生成虚拟机当前时刻的线程快照,以便可以进一步定位线程出现长时间停顿的原因,如线程间死锁、 死循环、 请求外部资源导致的长时间等待等

jconsole

JDK自带的集多种分析于一体的可视化图形工具。

jvisualvm

JDK自带的集多种分析于一体的可视化图形工具,并可以下载多种插件扩展其监控分析功能。

插件中心地址:https://visualvm.github.io/pluginscenters.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值