JVM性能监控与故障处理工具

本文章主要是是对JVM的一些监控工具进行整理。

1、JDK的命令行工具

JDK的监控工具主要有以下几个。

名称

主要作用

jps

JVM Process Status Tool 查找系统中所有的虚拟机进程                                                                   

 jstat

 JVM Statistics Monitoring Tool 手机虚拟机各方面的运行数据,统计类装载,垃圾收集次数、各个代的使用状况等

 jinfo

 Configuration Info for Java 查看虚拟机的配置信息

 jmap 

 Memory Map for java 生成虚拟机的内存转储快照。

 jhat

 JVM Heap Dump Browser用于分析heapdump文件。他会建立一个HTTP/HTML服务器,让用户在浏览器上查看分析结果。jmap是生产队快照文件

 jstack

Stack Trace for Java 显示虚拟机的线程快照


接下来一个一个命令进行分析:

1、jps

jps 主要用来查看运行的虚拟机的进程。很简单的一个命令。这里就不再细讲。

使用方法如下:

jps [options] [hostid]

选项

主要作用

-q

只输出LVMID(本地虚拟机ID,也就是进程ID),省略主类的名称                                                                   

-m

 输入虚拟机启动时传给main()的参数

 -l

 输出主类的全名,如果进程执行时的jar包,输出jar包路径,也就是包名

 -v

 输出虚拟机启动时的参数,也就是手动设置的System.properties。 如 java -Da=10 Demo(Demo为类名)


2、jstat

jstat可以查看虚拟机的类装载,各个代的内存使用情况,垃圾收集,JIT编译等运行数据。

使用方法如下:

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

其中interval是每隔多少秒或毫秒查询一次,count为一共查询多少次。

选项

主要作用

-class

查看类装载、卸载数量、装载和卸载的类的大小以及类装载所消耗的时间。

-gc

查看Java堆内存情况,各个代的容量,已用空间,GC时间等

-gccapacity

和-gc类似,增加了各个堆的最大最小空间

-gcutil

和-gc类似,关注的是各个堆已占用的百分比

-gccause

和-gcutil类似,增加了导致上一次gc的原因

-gcnew

新生代的使用状况

-gcnewcapacity

和-gcnew一致,关注的是最大和最小空间

-gcold

老年代的使用情况

-gcoldcapacity

和-gcold一致,关注的是最大和最小空间

-gcpermcapacity

永久带使用的空间大小

-compiler

查看经过JIT编译器编译过的方法,耗时等信息


jstat -class pid

显示列名

具体描述

Loaded

装载的类的数量

Bytes

装载类所占用的字节数(KB)

Unloaded

卸载类的数量

Bytes

卸载类的字节数

Time

装载和卸载类所花费的

上面列名的具体描述是从别人的博客复制过来的,对其中的一些描述我会进行详细说明。

jstat -gc pid

显示列名

具体描述

S0C   

年轻代中第一个survivor(幸存区)的容量 (字节)

S1C   

年轻代中第二个survivor(幸存区)的容量 (字节)

S0U   

年轻代中第一个survivor(幸存区)目前已使用空间 (字节)

S1U     

年轻代中第二个survivor(幸存区)目前已使用空间 (字节)

EC      

年轻代中Eden(伊甸园)的容量 (字节)

EU       

年轻代中Eden(伊甸园)目前已使用空间 (字节)

OC        

Old代的容量 (字节)

OU      

Old代目前已使用空间 (字节)

PC    

Perm(持久代)的容量 (字节)

PU

Perm(持久代)目前已使用空间 (字节)

YGC    

从应用程序启动到采样时年轻代中gc次数

YGCT   

从应用程序启动到采样时年轻代中gc所用时间(s)

FGC   

从应用程序启动到采样时old代(全gc)gc次数

FGCT    

从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT

从应用程序启动到采样时gc用的总时间(s)


jstat -gccapacity pid



显示列名

具体描述

NGCMN   

年轻代(young)中初始化(最小)的大小(字节)

NGCMX    

年轻代(young)的最大容量 (字节)

NGC    

年轻代(young)中当前的容量 (字节)

S0C  

年轻代中第一个survivor(幸存区)的容量 (字节)

S1C      

年轻代中第二个survivor(幸存区)的容量 (字节)

EC     

年轻代中Eden(伊甸园)的容量 (字节)

OGCMN     

old代中初始化(最小)的大小 (字节)

OGCMX      

old代的最大容量(字节)

OGC

old代当前新生成的容量 (字节)(和OC一致)

OC     

Old代的容量 (字节)

PGCMN   

perm代中初始化(最小)的大小 (字节)

PGCMX    

perm代的最大容量 (字节)  

PGC      

perm代当前新生成的容量 (字节)

PC    

Perm(持久代)的容量 (字节)

YGC   

从应用程序启动到采样时年轻代中gc次数

FGC

从应用程序启动到采样时old代(全gc)gc次数


jstat -gcutil pid

显示列名

具体描述

S0    

年轻代中第一个survivor(幸存区)已使用的占当前容量百分比

S1    

年轻代中第二个survivor(幸存区)已使用的占当前容量百分比

E     

年轻代中Eden(伊甸园)已使用的占当前容量百分比

O     

old代已使用的占当前容量百分比

P    

perm代已使用的占当前容量百分比

YGC    

从应用程序启动到采样时年轻代中gc次数

YGCT   

从应用程序启动到采样时年轻代中gc所用时间(s)

FGC   

从应用程序启动到采样时old代(全gc)gc次数

FGCT    

从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT

从应用程序启动到采样时gc用的总时间(s)

jstat -gcold pid

字段在前面都已详细说明,这里就不再重复

jstat -gcnew pid

MTT:这个字段是设置的是新生代中长期存在的对象进入到老年代的年龄,也就是通过-XX:MaxTenuringThreshold = 15这个参数,默认为15。

因为虚拟机并不是永远的要求对象年龄必须达到上面设置的数的时候才进入老年代,如果在Survivor空间中相同年龄所有对象的大小大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,所以DSS一般都是Survivor的一般,也就是SOC显示容量的一半。而TT则就显示这个年龄的大小,他总是小于等于15.

jstat -gcnewcapacity pid


jstat -compiler pid

显示列名

具体描述

Compiled

编译任务执行数量

Failed

编译任务执行失败数量

Invalid  

编译任务执行失效数量

Time  

编译任务消耗时间

FailedType

最后一个编译失败任务的类型

FailedMethod

最后一个编译失败任务所在的类及方法


3、jinfo

jinfo的作用是实时的查看和调整虚拟机的各项参数,同时也可以查看System.properties的参数。

jinfo的命令格式:

jinfo [ option ]

选项

主要作用

-flag

显示虚拟机参数(name)的值。                                                         

-flag[+|-]

 动态的开启或关闭虚拟机中名字为name的参数

 -flag=                  

 动态的更改name的值。

 -flags

显示虚拟的参数

-sysprops

显示system properties       


运行的java命令

java -Xms20M -Xmx20M -Xmn10M -Da=10-XX:+PrintGCDetails -XX:MaxTernuringThreshold=10 Demo                     

  Demo为运行的java类。

[root@localhost ~]# jinfo 10480

Attaching to process ID 10480, please wait...

Debugger attached successfully.

Server compiler detected.

JVM version is 24.79-b02

Java System Properties:

 

java.runtime.name = Java(TM) SE Runtime Environment                                                                                             

java.vm.version = 24.79-b02

sun.boot.library.path = /usr/java/jdk1.7.0_79/jre/lib/i386

java.vendor.url = http://java.oracle.com/

java.vm.vendor = Oracle Corporation

path.separator = :

file.encoding.pkg = sun.io

java.vm.name = Java HotSpot(TM) Server VM

sun.os.patch.level = unknown

sun.java.launcher = SUN_STANDARD

user.country = US

user.dir = /root

.............

a = 10 // 增加System.properitiey的方法就是通过-D的方式来添加

 

VM Flags:

 

 

-Xmx256M -Xms32M -Xms20M -Xmx20M -Xmn10M -Da=10

 





你可能感兴趣的:(JVM,JVM)