虚拟机性能监控与故障处理工具

  实践的角度了解虚拟机内存管理的世界。

一、jdk的命令行工具

  1.JPS(JVM Process Status Tool)虚拟机进程状况工具。

  显示制定系统内所有的HotSpot虚拟机进程。

  功能单一,但是其他jdk工具大多需要输入它查询到的LVMID来确定要监控的哪一个虚拟机进程。对于本地虚拟机进程来说,LVMID与OS的进程ID是一致的。

  使用: jps [options] [hostid]

  

  例子:

    

  2.jstat (JDK Statistic Monitoring Tool) 虚拟机统计信息监控工具

  用于监控虚拟机各种运行状态信息的命令行工具。可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行时数据。没有GUI界面。它是运行期定位虚拟机性能问题的首选工具。

  jshat 格式:

  jshat [option vimd [interval [s|ms] [count] ] ]

  vmid :虚拟机唯一ID,如果本地虚拟机进程,vmid与lvmid一致,如果远程虚拟机进程,那么vmid格式应该是:

    [protocol :][//] lvmid[@hostname [:port] /servername].

  interval和count :查询时隔和次数。如果没有这两个参数只查询一次。

  option :代表用户希望查询的虚拟机信息,主要分成三类:类装载、垃圾收集、运行期编译状况。

  

  例子:

  ①  jstat -class 15043 

   显示加载class的数量,及所占空间等信息

  

  解释:Loaded (装载的类的数量);Bytes(装载类所占用的字节数);Unloaded(卸载类的数量);Bytes(卸载类的字节数);Time(装载和卸载类所花费的时间)

  ② jstat -gc 15043

  可以显示gc的信息,查看gc的次数,及时间。

   

  解释:

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次数
YGCT 从应用程序启动到采样时年轻代中gc所用时间(s)
GCT 从应用程序启动到采样时gc用的总时间(s)

  ③jstat -gccapacity 15043  

  可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小

    

NGCMN   

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

NGCMX    

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

NGC    

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

S0C  

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

S1C      

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

EC     

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

OGCMN     

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

OGCMX      

old代的最大容量(字节)

OGC

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

OC     

Old代的容量 (字节)

PGCMN   

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

PGCMX    

perm代的最大容量 (字节)  

PGC      

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

PC    

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

YGC   

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

FGC

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

  ④ jstat -gcutil 15043 统计gc信息 已用空间占总空间的比值

  

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 -gccause 7594 与gcutil相似,额外输出导致上次GC的原因

  

  ⑥jstat -compiler 7594 输出JIT编译器编译过的方法、耗时等信息。

   

   ⑥ jstat -printcompilation 7594 输出已经被编译器编译的方法。

  

  

  3.jinfo: Java配置信息工具。

  作用:实时的查看和调整虚拟机各项参数。

  例子:

  使用jinfo来打开虚拟机GC日志打印参数  

 jinfo -flag +PrintGC 7594 
 jinfo -flag +PrintGCDDetails 7594

 关闭:
 jinfo -flag -PrintGC 7594 
 jinfo -flag -PrintGCDDetails 7594
  如果抛异常则表示不能修改。
 4. jmap(Memory Map for Java ):Java 内存映像工具
 
用于生成堆转储快照。
 命令格式:jmap [option] vmid
 
  

 

  例子:
  ① jmap -dump:live,format=b,file=d:/aaa.bin 7420 生成Java堆转储快照放在D:/aaa.bin
  ②jmap -heap 7420 显示堆详细信息
  
  
  能看出来是使用的是parallel 垃圾收集器,并且是四个线程。
  ③jmap -histo:live 7420 查看对象。
  num     #instances         #bytes  class name
  1 1 16 sun.security.util.ByteArrayLexOrder
  5.jhat (Java Heap Analysis Tool) 虚拟机堆转储快照分析工具。
   
与jmap搭配使用。用于分析jmap生成的堆转储快照。 
  jhat aaa.bin
  然后浏览器输入127.0.0.1:7000就能访问分析结果。
 6.jstack:(Stack Trace for java)
  用于生成虚拟机当前时刻的线程快照,线程快照就是当前虚拟机内每一条线程正在执行的方法栈的集合,生成线程快照的目的就是定位线程出现
长时间停顿的原因:如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程出现长时间停顿的原因。
  格式:jstack [option] vmid
  

  

 

 

 

  

posted @ 2016-06-05 23:34  张宗星  阅读(509)  评论(0编辑  收藏  举报