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

本篇介绍了随JDK发布的6个命令行工具(jps、jstat、jinfo、jmap、jhat和jstack)与2个可视化故障处理工具(JConsole和VisualVM)。
1.JDK命令行工具
JDK/bin目录下的命令行工具大多数是jdk/lib/tools.jar类库的一层薄包装,主要功能代码是在tools类库中实现的。
JDK主要命令行监控工具:
这里写图片描述
1.1 jps(JVM Process Status Tool):虚拟机进程状况工具
可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(main()函数所在类)的名称,及这些进程的本地虚拟机的唯一ID(LVMID,Local Virtual Machine Identifier)。
对于本地虚拟机进程,LVMID与操作系统的进程ID(PID)是一致的。

jps命令格式:jps [options] [hostid]
//例:
E:\program\Java\jdk1.8.0_45\bin>jps -1
9528 sun.tools.jps.Jps
//jps可以通过RMI协议查询开启了RMI服务远程虚拟机进程状态,hostid为RMI注册表中注册的主机名。

这里写图片描述
1.2 jstat(JVM Statistics Monitoring Tool):虚拟机统计信息监视工具
可以显示本地或远程(需远程主机提供RMI支持)虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据它是服务器上运行期定位虚拟机性能问题的首选工具。

jstat命令格式:jstat [ option vmid [interval[s|ms] [count]] ]
//参数interval代表查询间隔;count代表查询次数。若省略,则只查询一次
例:需要每250毫秒查询一次进程2764垃圾收集状况,共查询20次:
jstat -gc 2764 250 20
//如果是本地虚拟机进程,VMID与LVMID是一致的;如果是远程虚拟机进程,那
//VMID格式应为:[protocol:][//] lvmid[@hostname[:port]/servername]

选项option代表希望查询的虚拟机信息,主要分为3类:类装载、垃圾收集和运行期编译状况。
这里写图片描述
例子:服务器内存状况
这里写图片描述
解释:新生代Eden区(E)使用了6.2%空间;Survivor区(S0、S1)里面都为空;老年代(O);永久代(P);
程序运行以来共发生Minor GC(YGC,表示Young GC)16次,总耗时(YGCT)0.105秒;FGC(Full GC);
所有GC总耗时(GCT)0.577秒。
1.3 jinfo(Configuration Info for Java):Java配置信息工具
作用:实时查看和调整虚拟机各项参数。
jps的-v参数可以查看虚拟机启动时显示指定的参数列表。若想知道未被显示指定的参数的系统默认值,除去找资料外,只能使用jinfo的-flag选项进行查询;jinfo还可以使用-sysprops选项把虚拟机进程的System.getProperties( )内容打印出来。
JDK1.6之后,jinfo在Windows和Linux平台都有提供,并加入了运行期修改参数能力,可用-flag [+|-]name或-flag name=value修改一部分运行期可写的虚拟机参数值。

jinfo命令格式:jinfo [option] pid
//例:查询CMSInitiatingOccupancyFraction参数值
// jinfo -flag CMSInitiatingOccupancyFraction 1444

1.4 jmap(Memory Map for Java): Java内存映像工具
用于生成堆转储快照(一般称为heapdump或dump文件)。还可以查询finalize执行队列、Java堆和永久代的详细信息,如空间使用率、当前所用收集器种类等。
与jinfo命令一样,不少功能在Windows平台下受限。

jmap命令格式: jmap [option] vmid

这里写图片描述
1.5 jhat(JVM Heap Analysis Tool):虚拟机堆转储快照分析工具
与jmap搭配使用来分析jmap生成的堆转储快照。
jhat内置了一个微型的HTTP/HTML服务器,生成dump文件的分析结果后,可在浏览器中查看。
分析工作是一个耗时且消耗硬件资源的过程。
1.6 jstack(Stack Trace for Java):Java堆栈跟踪工具
用于生成虚拟机当前时刻的线程快照(一般称为threaddump或javacore文件)。
线程快照是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。
线程出现停顿时,通过jstack来查看各线程的调用堆栈,可知道未响应的线程在后台做什么事,或等待什么资源。

jstack命令格式: jstack [option] vmid

option选项合法值与具体含义如下表:
这里写图片描述
2.JDK的可视化工具
JDK中除了提供大量命令行工具,还有两个功能强大的可视化工具:JConsole和VisualVM。
JConsole是JDK1.5时期已经提供的虚拟机监控工具,VisualVM在JDK1.6 Update7中才首次发布。
2.1JConsole:Java监视与管理控制台
JConsole是基于JNX的可视化监视与管理的工具。它管理部分的功能是针对JMX MBean进行管理。
2.1.1启动 JConsole
JDK/bin目录下的“jconsole.exe”(实现jps功能)。
2.1.2内存监控
”内存“页签相当于可视化的jstat命令,用于监视受收集器管理的虚拟机内存(Java堆和永久代)的变化趋势。
2.1.3线程监控
”线程“页签相当于jstack命令,遇到线程停顿时可用此页签进行监控分析。
2.2VisualVM:多合一故障处理工具
VisualVM是到目前为止,随JDK发布的功能最强大的运行监视和故障处理程序,并且不需要被监视的程序基于特殊Agent运行。
2.2.1VisualVM兼容范围与插件安装
VisualVM基于NetBeans平台开发,因此具备插件扩展功能的特性。
安装插件:工具—>插件—>可用插件
2.2.2分析程序性能
Profiler页签中提供了程序运行期间方法级的CPU执行时间分析及内存分析,会对程序运行性能有比较大的影响。
1)CPU分析:统计每个方法的执行次数、执行耗时;
2)内存分析:统计每个方法关联的对象数及这些对象所占的空间。
!!JDK1.5之后,进行Profiler前,最好在被监视的程序中使用-Xshare:off参数来关闭类共享优化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值