前面的文章中我们介绍了jvisualvm,本篇文章我们来介绍下目前为止功能最为强大的可视化工具jmc。jmc(Java Mission Control)是jdk1.7开始引入的JVM监控工具。jmc可视化监控工具主要包含两大块内容:
1、JMX 控制台:监视和控制正在运行的JVM实例以及其上运行的应用程序。实时收集有关 Java 应用程序特征 (如内存使用量和 CPU 占用率) 和 JVM 活动 (如垃圾收集和方法优化) 的实时信息。
2、Java 飞行记录器JFR(Java Flight Recorder):JMC 中一个非常关键的功能。提供了一种从操作系统层、JVM 和 Java 应用程序层收集事件的方式,是一个用于收集有关正在运行的 Java 应用程序的诊断数据和概要分析数据的工具
一、前提条件
使用jmc对远程Java进行进行JMX监控及JFR需要具备两个前提条件,即支持JMX连接和启动JFR飞行记录。
1、支持JMX连接的配置
要配置远程Java进程支持JMX连接,需要在启动Java进程时加入以下属性:
-Dcom.sun.management.jmxremote.port=7091
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
上述配置的意义是开启JMX连接端口7091,同时配置不需要ssl安全认证方式连接(一般我们的监控的服务器都是在本地局域网中,所以没有必要配置ssl安全认证方式连接,若要配置ssl安全认证方式连接,还需要配置连接的用户名及密码等)
2、取消锁定商业功能以开启飞行记录的配置
取消锁定商业功能有两种方式:
a、使用jcmd命令解锁
使用用 VM.unlock_commercial_features 参数取消锁定商业功能,命令如下:
jcmd pid VM.unlock_commercial_features
b、应用程序启动参数中增加解锁参数
解锁参数如下:
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder
二、Jmc的使用
1、启动jmc
系统运行中输入jmc(需要先配置环境变量,一般开发人员搭建Java开发环境时都会配置)命令,点击“确定“后如下框所示:
2、添加远程JVM连接
点击菜单“文件”——》连接,弹出框如下图所示:
在弹出框中输入远程进程的主机的IP和端口,如:172.30.14.242:7091(小编使用的服务器IP是172.30.14.242,配置的支持JMX的端口是7091),输入完成后点击“完成”按钮则在JVM浏览器窗口中可以看到新增了一条记录,如下图所示:
3、JMX控制台
JMX控制台提供了实时集合、堆使用情况、CPU 负载以及MBean 服务器中注册的信息并可更改一些运行时属性。
3.1、概览
双击JVM浏览器记录下的Mbean服务器或者右键点击JVM浏览器记录下的Mbean服务器,在弹出菜单中点击“启动JMX控制台”,在右侧窗口中可以看到,Java应用程序概览信息,概览信息展示CPU和内存使用情况的概览,可以通过图表右上角的“+”可以添加自定义图表,自定义展示属性。如下图所示:
3.2、MBean浏览器
MBean是采用符合JMX规范设计模式的托管对象。MBean浏览器提供对所有已注册MBean的访问。如下图所示:
3.3、触发器
管理满足特定条件时触发事件的规则,比如应用程序的 CPU 占用率达到了 70%,则调用诊断命令,应用程序预警或者发送电子邮件等。如下图所示:
3.4、系统
提供了运行时 JVM 信息、JVM 的性能属性以及操作系统属性信息,如下图所示:
3.5、内存
监视应用程序使用内存资源的效率。可以查看:堆使用量、垃圾收集信息和活动内存池。如下图所示:
3.6、线程
使用线程选项卡可以监视线程活动,类似命令行工具jstack以及jconsole和jvisualvm线程监控相关的功能,如下图所示:
3.7、诊断命令
使Java应用程序执行诊断命令,类似命令行工具jcmd,如下图所示:
4、JFR飞行记录器
收集有关 JVM 及其上运行的 Java 应用程序的数据,通过这些数据,开发人员对 JVM 性能瓶颈,性能问题进行分析诊断。
4.1、启动飞行记录
双击JVM浏览器记录下的飞行记录器或者右键点击JVM浏览器记录下的飞行记录器,在弹出菜单中点击“启动飞行记录”,弹出飞行记录配置窗口,如下图所示:
配置飞行记录时间,点击“完成”,等待执行飞行记录完成,如下图:
4.2、一般信息
飞行记录完成后,在右侧窗口中会展示飞行记录窗口,默认展示一般信息。一般信息中包含堆使用量、CPU总体占用率、GC暂停时间三个重要的指标。对于Java应用而言,GC暂停时间是最值得关注的指标。如下图所示:
4.3、内存信息
可以查看垃圾收集器的类型,垃圾收集的暂停时间以及GC时间,GC配置等信息,有助于分析配置是否达到最优;如下图所示:
4.4、代码分析
代码分析是Java性能分析重点,通过代码分析,我们可以清楚的知道系统运行时,哪些类及方法被高频率的调用如下图所示:
4.5、线程
可以得知CPU占用率的分布(系统占用率、应用程序+JVM占用率)和活动线程数。对于CPU占用率而言,应用程序应该占用99%的计算资源,而活动线程数应该控制在合理范围内。如下图所示:
4.6、I/O
I/O作为系统的基础指标,I/O过高会导致系统性能急剧下降,避免过度打印日志和生成大文件可以避免系统I/O过高导致的性能问题。如下图所示:
4.7、系统
可以查看正在运行 Java 应用程序的系统的硬件和软件的信息,查看正在运行的进程,系统配置;避免操作系统引起的性能问题。如下图所示:
4.8、事件
包含有关记录期间收集的事件的信息,记录每个事件及其发生时间和与该事件关联的数据。如下图所示:
以上介绍了可视化工具jmc基本使用,使用jmc可以很好的帮助我们分析性能瓶颈,定位性能问题,大家可以动手实践下jmc的使用;最新的JVM可视化工具jmc是功能最为强大的,作为新近的Java从业人员您可以不用去学习jconsole和jvisualvm,但必须学习并学会jmc的使用。希望本篇文章对大家有所帮助。后续我们还会带来更多精彩的文章,感兴趣的同学可以关注我们的微信公众号。