JDK提供了几个功能集成度更高的可视化工具,我们可以使用这些可视化工具以更加便捷的方式进行进程故障诊断和调试工作。
今天就简单介绍一些JDK中的可视化故障处理工具。
JHSDB:基于服务性代理的调试工具
在说JHSDB之前,先来了解一下JCMD和JHSDB这两个集成式的多功能工具箱,它们不仅整合了那些基础故障工具所能提供的专项功能,而且能够做得比基础故障工具更好、更强大。JCMD、JHSDB与原基础工具实现相同功能的简要对比如下所示:
下面言归正传JHSDB,JHSDB是一款基于服务性代理(Serviceability Agent,SA)实现的进程外调试工具。服务性代理是 HotSpot虚拟机中一组用于映射Java虚拟机运行信息的、主要基于Java语言(含少量JNI代码)实现的API集合。服务性代理以HotSpot内部的数据结构为参照物进行设计,把这些C++的数据抽象出Java模型对象,相当于HotSpot的C++代码的一个镜像。通过服务性代理的API,可以在一个独立的Java虚拟机的进程里分析其他HotSpot虚拟机的内部数据,或者从HotSpot虚拟机进程内存中dump出来的转储快照里还原出它的运行状态细节。
我们可以先通过jps查询到测试程序的进程ID,例如:
jps -l8440 org.jetbrains.jps.cmdline.Launcher11180 JHSDB_TestCase15692 jdk.jcmd/sun.tools.jps.Jps
然后再使用以下命令进入JHSDB的图形化模式,并使其附加进程ID:
jhsdb hsdb --pid 11180
然后就会打开如下所示的界面:
JConsole:Java监视与管理控制台
JConsole(Java Monitoring and Management Console)是一款基于JMX(Java Manage-ment Extensions)的可视化监视、管理工具。它的主要功能是通过JMX的MBean(Managed Bean)对系统进行信息收集和参数动态调整。JMX是一种开放性的技术,不仅可以用在虚拟机本身的管理上,还可以运行于虚拟机之上的软件中,典型的如中间件大多也基于JMX来实现管理与监控。虚拟机对JMX MBean的访问也是完全开放的,可以使用代码调用API、支持JMX协议的管理控制台,或者其他符合 JMX规范的软件进行访问。
我们可以通过JDK/bin目录下的jconsole.exe来启动JCon-sole。点击后如下所示:
进入后的界面如下所示,“概述”页签里显示的是整个虚拟机主要运行数据的概览信息,包括“堆内存使用情况”、“线程”、“类”、“CPU使用情况”四项信息的曲线图,这些曲线图是后面“内存”“线程”“类”页签的信息汇总。我们可以随便点一点看一下里面的内容:
VisualVM:多合-故障处理工具
VisualVM(All-in-One Java Troubleshooting Tool)是功能最强大的运行监视和故障处理程序之一, 曾经在很长一段时间内是Oracle官方主力发展的虚拟机故障处理工具。它除了常规的运行监视、故障处理外,还将提供其他方面的能力,譬如性能分析(Profiling)。VisualVM的性能分析功能比起专业的第三方工具来说也是能扛能打,而且VisualVM还有一个很大的优点:不需要被监视的程序基于特殊Agent去运行,因此它的通用性很强,对应用程序实际性能的影响也较小,使得它可以直接应用在生产环境中。
VisualVM基于NetBeans平台开发工具,所以一开始它就具备了通过插件扩展功能的能力,有了插件扩展支持,VisualVM可以做到:
1、显示虚拟机进程以及进程的配置、环境信息(jps、jinfo)。
2、监视应用程序的处理器、垃圾收集、堆、方法区以及线程的信息(jstat、jstack)。
3、dump以及分析堆转储快照(jmap、jhat)。
4、方法级的程序运行性能分析,找出被调用最多、运行时间最长的方法。
5、离线程序快照:收集程序的运行时配置、线程dump、内存dump等信息建立一个快照,可以将快 照发送开发者处进行Bug反馈。
6、其他插件带来的无限可能性。
VisualVM的插件可以手工进行安装,在网站https://visualvm.github.io/pluginscenters.html
上下载nbm包后,点击“工具->插件->已下载”菜单,然后在弹出对话框中指定nbm包路径便可完成安装。独立安装的插件存储在VisualVM的根目录,插件安装后是放在JDK_HOME/lib/visualvm中的。
VisualVM也可以自动安装大多数所需的插件,在有网络连接的环境下,点击“工具-> 插件菜单”,在弹出的页签中的“可用插件”及“已安装”中列举了当前版本 VisualVM可以使用的全部插件,选中插件后在右边窗口会显示这个插件的基本信息,如开发者、版本、功能描述等。
Java Mission Control:可持续在线的监控工具
除去带有7×24小时的技术支持以及可以为企业专门定制安装包这些非技术类的增强服务外,jdk还有一系列的监控、管理工具,这些功能全部都是需要商业授权才能在生产环境中使用。在个人开发环境中,允许免费使用JMC和JFR。
JFR是一套内建在HotSpot虚拟机里面的监控和基于事件的信息搜集框架,与其他的监控工具相比,Oracle特别强调它“可持续在线”的特性。JFR在生产环境中对吞吐量的影响一般不会高于1%,而且JFR监控过程的开始、停止都是完全可动态的,即不需要重启应用。JFR的监控对应用也是完全透明的,即不需要对应用程序的源码做任何修改,或者基于特定的代理来运行。
JMC最初并没有像VisualVM那样一开始就基于自家的Net-Beans平台来开发,而是选择了由IBM捐赠的Eclipse RCP作为基础框架,现在的JMC不仅可以下载到独立程序,也可以作为Eclipse的插件来使用。JMC与虚拟机之间同样采取JMX协议进行通信,JMC一方面作为JMX控制台,显示来自虚拟机MBean提供的数据;另一方面作为JFR的分析工具,展示来自JFR的数据。启动后JMC的主界面如下图所示:
原创 java秃兔