JDK除了提供大量的命令行工具外,还有两个功能强大的可视化工具:JConsole和VisualVM,这两个工具是JDK的正式成员。
JConsole(Java监视与管理控制台)
- JConsole(Java Monitoring and Management Console)是一种基于JMX的可视化监视、管理工具。
- 它管理部分的功能是针对JMX MBean进行管理,由于MBean可以使用代码、中间件服务器的管理控制台或者所有符合JMX规范的软件进行访问,所以这里着重介绍监视部分的功能。
1. 启动JConsole
-
通过JDK/bin目录下的“jconsole.exe”启动JConsole后,将自动搜索处本机运行的所有虚拟机进程,不需要用户自己使用jps来查询了。
JConsole连接界面.png -
主界面共包括“概述”、“内存”、“线程”、“类”、“VM摘要”、“MBean”。
JConsole主界面.png
“概述”页签显示的是整个虚拟机主要运行数据的概览,其中包括“堆内存使用情况”、“线程”、“类”、“CPU使用情况”4种信息的曲线图,这些曲线图是后面“内存”、“线程”、“类”页签的信息汇总。
2. 内存监控
-
“内存”页签相当于可视化的jstat命令,用于监视受收集器管理的虚拟机内存(Java堆和永久代)的变化趋势。
JConsole的内存监控.png
3. 线程监控
- “线程”页签的功能相当于可视化的jstack命令,遇到线程停顿时可以使用这个页签进行监控分析。
- 线程长时间停顿的主要原因只要有:等待外部资源(数据库连接、网络资源、设备资源等)、死循环、锁等待(活锁和死锁)。
JConsole的线程监控.png
4.类监控
JConsole的类监控.png5.VM监控
JConsole的VM监控.png6.MBean监控
JConsole的MBean监控.pngVisualVM(多合一故障处理工具)
-
VisualVM(All-in-One Java Troubleshooting Tool)是到目前为止随JDK发布的功能最强大的运行监视和故障处理程序,并且可以预见在未来一段时间内都是官方主力发展的虚拟机故障处理工具。
-
JDK8以后,不在提供visualvm.exe,需到官网下载相应版本:https://visualvm.github.io/download.html
-
它还提供很多其他方面的功能,如性能分析(Profiling)。
-
VisualVM还有一个很大的优点
不需要被监视的程序基于特殊Agent运行,因此它对应用程序的实际性能的影响很小,使得它直接应用在生产环境中。
VisualVM主界面0.png
1. VisualVM兼容范围与插件安装
VisualVM基于NetBeans平台开发,因此它一开始就具备了插件扩展功能的特性,通过插件扩展支持,VisualVM可以做到。
- 显示虚拟机进程以及进程中的配置、环境信息(jps、jinfo)。
- 监视应用程序的CPU、GC、堆、方法区以及线程的信息(jstat、jstack)。
- dump以及分析堆转储快照(jmap、jhat)。
- 方法级的程序运行性能分析,找出被调用最多、运行时间最长的方法。
- 离线程序快照:收集程序的运行时配置、线程dump、内存dump等信息建立一个快照,可以将快照发送开发者处进行Bug反馈。
- 其它plugins的无限的可能性...
首次启动VisualVM后,不必着急找应用程序进行监测,因为再VisualVM还没有加载任何插件,虽然基本的监视、线程面板的功能主程序都以默认插件的形式提供了,但是不给VisualVM装任何扩展插件,就相当于放弃了它最精华的功能,和没有安装任何应用软件操作系统差不多。
2.生成、浏览堆转储快照
- 在VisualVM中生成dump文件有两种方式,可以执行下列任一操作
- 在“应用程序”窗口中右键单击应用程序节点,然后选择“堆Dump”。
- 在“应用程序”窗口中双击应用程序节点以打开应用程序标签,然后在“监视”标签中单击“堆Dump”。
生成了dump文件之后,应用程序页签将在该堆的应用程序下增加一个以[heapdump]开头的子节点,并且在主页签中打开了该转储快照。
从堆页签中的“摘要”面板可以看到应用程序dump时的运行时参数、System.getProperties()的内容、线程堆栈等信息,“类”面板则是以类为统计口径统计类的实例数量、容量信息,“实例”面板不能直接使用,因为不能确定用户想查看哪个类的实例,所以需要通过“类”面板进入,在“类”中选择一个关心的类后双击鼠标,即可在“实例”里面看见此类的500个实例的具体属性信息。“OQL控制台”面板中就是运行OQL查询语句的,同jhat中介绍的OQL功能一样。
3.分析程序性能
- 在Profiler页签中,VisualVM提供了程序运行期间方法级的CPU执行时间分析以及内存分析,做Profiling分析肯定会对程序运行性能有比较大的影响,所以一般不在生产环境中使用这项功能。
- 要开始分析,先选择“CPU”和“内存”按钮中的一个,然后切换到应用程序中对程序进行操作,VisualVM会记录到这段时间中应用程序执行过的方法。
如果是CPU分析,将会统计每个方法的执行次数、执行耗时;
如果是内存分析,则会统计每个方法关联的对象数以及这些对象所占的空间。
分析结束后,点击“停止”按钮结束监控过程。
4.BTrace动态日志跟踪
- BTrace是一个很“有趣”的VisualVM插件,本身也是可以独立运行的程序。
- 它的作用是在不停止目标程序运行的前提下,通过HotSpot虚拟机的HotSwap技术动态加入原本并不存在的调试代码。
- BTrace的用法还有许多,打印调用堆栈、参数、返回值只是最基本的应用,在它的网站上有使用BTrace进行性能监视、定位连接泄漏和内存泄漏、解决多线程竞争问题等例子。
网友评论