所有分类
  • 所有分类
  • 未分类

Java调试–监视类工具

简介

说明

本文介绍Java的监视类工具。

官网文档

https://docs.oracle.com/javase/8/docs/technotes/tools/unix/

监控Java应用的命令

jconsole

简介

提供JVM活动的图形化视图,包括堆内存使用量、线程个数,类数量、CPU占用率。

示例

直接输入jconsole即可。

jvisualvm

使用

在命令行输入jvisualvm即可启动VisualVm。可以将其他功能(例如 JConsole 、Btrace、Virtual GC)添加为可选插件。Idea中也可以将添加visualvm插件,插件名称:“VisualVm Launcher”。

功能

Visual VM是一个功能强大的多合一故障诊断和性能监控的可视化工具,它集成了多种性能统计工具的功能,使用Visual VM可以替代jstat、jmap、jhat、jstack等工具。

JVisualVM 使用简单,几乎0配置,功能比较丰富的,几乎囊括其它JDK自带命令的所有功能:

  • 内存信息
  • 线程信息
  • Dump堆(本地进程)
  • Dump线程(本地进程)
  • 打开堆Dump。堆Dump可以用jmap来生成。
  • 打开线程Dump
  • 生成应用快照(包含内存信息、线程信息等等)
  • 性能分析。 CPU分析(各个方法调用时间,检查哪些方法耗时多),内存分析(各类对象占用的内存,检查哪些类占用内存多)

监控JVM的命令

jstat

作用

jstat(Java Virtual Machine Statistics Monitoring Tool),它监控基于HotSpot的JVM,对其堆的使用情况进行实时的命令行的统计。使用jstat我们可以对指定的JVM做如下监控:

  • 类的加载及卸载情况
  • 查看新生代、老生代及持久代的容量及使用情况、垃圾收集情况(垃圾回收的次数及垃圾回收占用的时间)
  • 查看新生代中Eden区及Survior区中容量及分配情况等

格式:   

jstat -help|-options  //查看帮助/查看所有选项
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]] [-J<javaOption>]

示例

命令作用
jstat -gcutil pid 100 5每100ms打印一次pid的gcutil信息,打印5次。
jstat -gc pid打印一次pid的gc
jstat -class pid
jstat -gcutil 18272@the_ip:2021/jstatdName 1000查看远程服务器上的GC情况。 需要先在远程服务器上面开启jstatd服务(见:Jstatd命令(Java Statistics Monitoring Daemon)_运维_冯立彬的博客-CSDN博客

选项

OptionDisplays…
class查看类加载情况的统计
compiler查看HotSpot中即时编译器编译情况的统计
gc查看JVM中堆的垃圾收集情况的统计
gccapacity查看新生代、老生代及持久代的存储容量情况
gccause查看垃圾收集的统计情况(这个和-gcutil选项一样),如果有发生垃圾收集,它还会显示最后一次及当前正在发生垃圾收集的原因。
gcnew查看新生代垃圾收集的情况
gcnewcapacity查看新生代的存储容量情况
gcold查看老生代及持久代发生GC的情况
gcoldcapacity查看老生代的容量
gcpermcapacity查看持久代的容量
gcutil查看新生代、老生代及持久代垃圾收集的情况
printcompilationHotSpot编译方法的统计
选项含义
-option选项。支持jstat -options打印出来的项。
-t在输出内容的第一列显示时间戳,这个时间戳代表的时JVM开始启动到现在的时间。
-h <lines>指定每隔几行就输出列头,如果不指定,默认是只在第一行出现列头。
vmid即java程序的pid
interval输出间隔时间,单位可以是秒或者毫秒,通过指定s或ms确定,默认单位为毫秒。 示例:jstat -gc pid 100ms 5:每100ms打印一次,共打印5次。
count打印次数。如果缺省则打印无数次。
-JjavaOption用于将给定的javaOption传给java应用程序加载器,例如,“-J-Xms48m”将把启动内存设置为48M。可以传递的选项,见:
    Linux and Solaris:java – the Java application launcher
    Windows: java – the Java application launcher

-class(类加载情况的统计

列名说明
Loaded加载了的类的数量
Bytes加载了的类的大小,单为Kb
Unloaded卸载了的类的数量
Bytes卸载了的类的大小,单为Kb
Time花在类的加载及卸载的时间

-compiler(HotSpot中即时编译器编译情况的统计

列名说明
Compiled编译任务执行的次数
Failed编译任务执行失败的次数
Invalid编译任务非法执行的次数
Time执行编译花费的时间
FailedType最后一次编译失败的编译类型
FailedMethod最后一次编译失败的类名及方法名

-gc(JVM中堆的垃圾收集情况的统计

列名说明
S0C新生代中Survivor space中S0当前容量的大小(KB)
S1C新生代中Survivor space中S1当前容量的大小(KB)
S0U新生代中Survivor space中S0容量使用的大小(KB)
S1U新生代中Survivor space中S1容量使用的大小(KB)
ECEden space当前容量的大小(KB)
EUEden space容量使用的大小(KB)
OCOld space当前容量的大小(KB)
OUOld space使用容量的大小(KB)
PCPermanent space当前容量的大小(KB)
PUPermanent space使用容量的大小(KB)
YGC从应用程序启动到采样时发生 Young GC 的次数
YGCT从应用程序启动到采样时 Young GC 所用的时间(秒)
FGC从应用程序启动到采样时发生 Full GC 的次数
FGCT从应用程序启动到采样时 Full GC 所用的时间(秒)
GCTT从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGC+FGC


    -gccapacity(
新生代、老生代及持久代的存储容量情况

列名说明
NGCMN新生代的最小容量大小(KB)
NGCMX新生代的最大容量大小(KB)
NGC当前新生代的容量大小(KB)
S0C当前新生代中survivor space 0的容量大小(KB)
S1C当前新生代中survivor space 1的容量大小(KB)
ECEden space当前容量的大小(KB)
OGCMN老生代的最小容量大小(KB)
OGCMX老生代的最大容量大小(KB)
OGC当前老生代的容量大小(KB)
OC当前老生代的空间容量大小(KB)
PGCMN持久代的最小容量大小(KB)
PGCMX持久代的最大容量大小(KB)
PGC当前持久代的容量大小(KB)
PC当前持久代的空间容量大小(KB)
YGC从应用程序启动到采样时发生 Young GC 的次数
FGC从应用程序启动到采样时发生 Full GC 的次数

-gccause(查看垃圾收集的统计情况

这个选项用于查看垃圾收集的统计情况(这个和-gcutil选项一样),如果有发生垃圾收集,它还会显示最后一次及当前正在发生垃圾收集的原因,它比-gcutil会多出最后一次垃圾收集原因以及当前正在发生的垃圾收集的原因。

列名说明
LGCC最后一次垃圾收集的原因,可能为“unknown GCCause”、“System.gc()”等
GCC当前垃圾收集的原因

-gcnew(新生代垃圾收集的情况

列名说明
S0C当前新生代中survivor space 0的容量大小(KB)
S1C当前新生代中survivor space 1的容量大小(KB)
S0US0已经使用的大小(KB)
S1US1已经使用的大小(KB)
TTTenuring threshold,要了解这个参数,我们需要了解一点Java内存对象的结构,在Sun JVM中,(除了数组之外的)对象都有两个机器字(words)的头部。第一个字中包含这个对象的标示哈希码以及其他一些类似锁状态和等标识信息,第二个字中包含一个指向对象的类的引用,其中第二个字节就会被垃圾收集算法使用到。
在新生代中做垃圾收集的时候,每次复制一个对象后,将增加这个对象的收集计数,当一个对象在新生代中被复制了一定次数后,该算法即判定该对象是长周期的对象,把他移动到老生代,这个阈值叫着tenuring threshold。这个阈值用于表示某个/些在执行批定次数youngGC后还活着的对象,即使此时新生的的Survior没有满,也同样被认为是长周期对象,将会被移到老生代中。
MTTMaximum tenuring threshold,用于表示TT的最大值。
DSSDesired survivor size (KB).可以参与这里:http://blog.csdn.net/yangjun2/article/details/6542357
ECEden space当前容量的大小(KB)
EUEden space已经使用的大小(KB)
YGC从应用程序启动到采样时发生 Young GC 的次数
YGCT从应用程序启动到采样时 Young GC 所用的时间(单位秒)

-gcnewcapacity(新生代的存储容量情况

列名说明
NGCMN          新生代的最小容量大小(KB)
NGCMX    新生代的最大容量大小(KB)
NGC    当前新生代的容量大小(KB)
S0CMX新生代中SO的最大容量大小(KB)
S0C当前新生代中SO的容量大小(KB)
S1CMX新生代中S1的最大容量大小(KB)
S1C当前新生代中S1的容量大小(KB)
ECMX新生代中Eden的最大容量大小(KB)
EC当前新生代中Eden的容量大小(KB)
YGC从应用程序启动到采样时发生 Young GC 的次数
FGC从应用程序启动到采样时发生 Full GC 的次数


    -gcold(
老生代及持久代发生GC的情况

列名说明
PC当前持久代容量的大小(KB)
PU持久代使用容量的大小(KB)
OC当前老年代容量的大小(KB)
OU老年代使用容量的大小(KB)
YGC从应用程序启动到采样时发生 Young GC 的次数
FGC从应用程序启动到采样时发生 Full GC 的次数
FGCT从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGC+FGC


    -gcoldcapacity(
老生代的存储容量情况

列名说明
OGCMN老生代的最小容量大小(KB)
OGCMX老生代的最大容量大小(KB)
OGC当前老生代的容量大小(KB)
OC当前新生代的空间容量大小(KB)
YGC从应用程序启动到采样时发生 Young GC 的次数
FGC从应用程序启动到采样时发生 Full GC 的次数
FGCT从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGC+FGC


    -gcpermcapacity(
持久代的存储容量情况

列名说明
PGCMN持久代的最小容量大小(KB)
PGCMX持久代的最大容量大小(KB)
PGC当前持久代的容量大小(KB)
PC当前持久代的空间容量大小(KB)
YGC从应用程序启动到采样时发生 Young GC 的次数
FGC
FGCT从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGC+FGC


    -gcutil(
新生代、老生代及持代垃圾收集的情况

列名说明
S0Heap上的 Survivor space 0 区已使用空间的百分比
S1Heap上的 Survivor space 1 区已使用空间的百分比
EHeap上的 Eden space 区已使用空间的百分比
OHeap上的 Old space 区已使用空间的百分比
PPerm space 区已使用空间的百分比
YGC从应用程序启动到采样时发生 Young GC 的次数
YGCT从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC从应用程序启动到采样时发生 Full GC 的次数
FGCT从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGC+FGC

-printcompilation(HotSpot编译方法的统计

列名说明
Compiled编译任务执行的次数
Size方法的字节码所占的字节数
Type编译类型
Method指定确定被编译方法的类名及方法名,类名中使名“/”而不是“.”做为命名分隔符,方法名是被指定的类中的方法,这两个字段的格式是由HotSpot中的“-XX:+PrintComplation”选项确定的。
0

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录