码迷,mamicode.com
首页 > 编程语言 > 详细

深入理解JAVA虚拟机 虚拟机性能监控和故障处理工具

时间:2017-06-27 23:39:08      阅读:307      评论:0      收藏:0      [点我收藏+]

标签:UI   内存   对象   doc   处理   color   bsp   垃圾收集   map   

jre的bin目录下的工具,都非常小。它都是tools.jar下面的代码的一层封装而已。tools.jar不是java标准,是Hotspot实现的。

技术分享

名称    

作用

jps

JVM Process Status Tool,现实指定系统内所有的HotSpot虚拟机进程 

jstat

JVM Statistics Monitoring Tool,用于收集Hotspot虚拟机各个方面的运行参数 

jinfo

Configuration Info for Java,现实虚拟机配置信息

jmap

Memory map for java,生成虚拟机的内存转储快照

jhat

JVM heap Dunp Browser,用于分析heapdump文件,他会建立一个HTTP/HTML服务,让用户可通过浏览器查看 

jstack

Stack Track for java ,显示虚拟机线程快照

jps

jps用来查看基于HotSpot的JVM里面中,所有具有访问权限的Java进程的具体状态, 包括进程ID,进程启动的路径及启动参数等等,与unix上的ps类似,只不过jps是用来显示java进程,可以把jps理解为ps的一个子集。 

主要参数说明 :

-q 忽略输出的类名、Jar名以及传递给main方法的参数,只输出pid。

-m 输出传递给main方法的参数,如果是内嵌的JVM则输出为null。

-l 输出应用程序主类的完整包名,或者是应用程序JAR文件的完整路径。

-v 输出传给JVM的参数

技术分享

jstat

Jstat用于监控基于HotSpot的JVM,对其堆的使用情况进行实时的命令行的统计,使用jstat我们可以对指定的JVM做如下监控:

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

jstat工具特别强大,它有众多的可选项,通过提供多种不同的监控维度,使我们可以从不同的维度来了解到当前JVM堆的使用情况。详细查看堆内各个部分的使用量,使用的时候必须加上待统计的Java进程号,可选的不同维度参数以及可选的统计频率参数。

命令格式:

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

option 参数如下面表格

Option Displays...

class

用于查看类加载情况的统计

compiler

用于查看HotSpot中即时编译器编译情况的统计

gc

用于查看JVM中堆的垃圾收集情况的统计

gccapacity

用于查看新生代、老生代及持久代的存储容量情况

gccause

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

gcnew

用于查看新生代垃圾收集的情况

gcnewcapacity

用于查看新生代的存储容量情况

gcold

用于查看老生代及持久代发生GC的情况

gcoldcapacity

用于查看老生代的容量

gcpermcapacity

用于查看持久代的容量

gcutil

用于查看新生代、老生代及持代垃圾收集的情况

printcompilation

HotSpot编译方法的统计

interval 和count 代表查询次数和间隔。

技术分享

技术分享

技术分享

列说明:

S0C

新生代中Survivor space中S0当前容量的大小(KB)

S1C

新生代中Survivor space中S1当前容量的大小(KB)

S0U

新生代中Survivor space中S0容量使用的大小(KB)

S1U

新生代中Survivor space中S1容量使用的大小(KB)

EC

Eden space当前容量的大小(KB)

EU

Eden space容量使用的大小(KB)

OC

Old space当前容量的大小(KB)

OU

Old space使用容量的大小(KB)

PC

Permanent space当前容量的大小(KB)

PU

Permanent space使用容量的大小(KB)

YGC

从应用程序启动到采样时发生 Young GC 的次数

YGCT

从应用程序启动到采样时 Young GC 所用的时间(秒)

FGC

从应用程序启动到采样时发生 Full GC 的次数

FGCT

从应用程序启动到采样时 Full GC 所用的时间(秒)

GCT

T从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGC+FGC

jinfo

jinfo可以输出并修改运行时的java 进程的opts。用处比较简单,用于输出JAVA系统参数及命令行参数。

技术分享

技术分享

jmap

jmap用于生成堆转储快照(一般称为heapdump或者dump文件)。当然也可其他方法比如加参数-XX:+HeapDumpOnOutOfMemoryError参数,在虚拟机OOM异常的之后自动生成dump文件,也可以通过-XX:+HeapDumpOnCtrlBreak参数则可以使用Ctrl+Break键让虚拟机生成dump文件。

参数说明:

-dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.

-finalizerinfo 打印正等候回收的对象的信息.

-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.

-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀"*". 如果live子参数加上后,只统计活的对象数量.

-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.

-F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.

技术分享

技术分享

jhat

jhat是sun提供的dump分析工具,上面讲过分析dump的工具还有MAT( Eclipse Memory Analyzer tool)、IBM HeapAnalyzer等,一般这个命令不太用到,是因为分析dump是个既耗时又耗机器资源的过程,第二个原因是这个工具比较简陋,没有MAT( Eclipse Memory Analyzer tool)、IBM HeapAnalyzer这些专业和强大。

jstack

jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64"

可以查看线程当前的调用堆栈,线程状态,锁持有情况:

技术分享

技术分享

JDK可视化工具

jconsole

JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM,不过此JVM需要使用可管理的模式启动。如果要把一个应用以可管理的形式启动,可以在启动是设置com.sun.management.jmxremote。

设置参数:

技术分享

调用命令:

技术分享

打开了可视化界面如下:

技术分享

 

深入理解JAVA虚拟机 虚拟机性能监控和故障处理工具

标签:UI   内存   对象   doc   处理   color   bsp   垃圾收集   map   

原文地址:http://www.cnblogs.com/xiaolang8762400/p/7087282.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!