Java性能监控和故障诊断可视化工具之三:jmc

来自:麻辣软硬件(微信号:VOSDeveloper),作者:cdk

前面的文章中我们介绍了jvisualvm,本篇文章我们来介绍下目前为止功能最为强大的可视化工具jmc。jmc(Java Mission Control)是jdk1.7开始引入的JVM监控工具。jmc可视化监控工具主要包含两大块内容:

a、JMX 控制台:监视和控制正在运行的JVM实例以及其上运行的应用程序。实时收集有关 Java 应用程序特征 (如内存使用量和 CPU 占用率) 和 JVM 活动 (如垃圾收集和方法优化) 的实时信息;

b、Java 飞行记录器JFR(Java FlightRecorder):JMC 中一个非常关键的功能。提供了一种从操作系统层、JVM 和 Java 应用程序层收集事件的方式,是一个用于收集有关正在运行的 Java 应用程序的诊断数据和概要分析数据的工具。

 

使用jmc对远程Java进行进行JMX监控及JFR需要具备两个前提条件,即支持JMX连接和启动JFR飞行记录。

支持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安全认证方式连接,还需要配置连接的用户名及密码等)

取消锁定商业功能以开启飞行记录的配置


取消锁定商业功能有两种方式: 


a、使用jcmd命令解锁


使用用 VM.unlock_commercial_features 参数取消锁定商业功能,命令如下:

jcmd pid VM.unlock_commercial_features



b、应用程序启动参数中增加解锁参数

解锁参数如下:

-XX:+UnlockCommercialFeatures-XX:+FlightRecorder

1、启动jmc


系统运行中输入jmc(需要先配置环境变量,一般开发人员搭建Java开发环境时都会配置)命令,点击“确定“后如下框所示:

2、添加远程JVM连接



点击菜单“文件”——》连接,弹出框如下图所示:


在弹出框中输入远程进程的主机的IP和端口,如:172.30.14.242:7091(小编使用的服务器IP是172.30.14.242,配置的支持JMX的端口是7091),输入完成后点击“完成”按钮则在JVM浏览器窗口中可以看到新增了一条记录,如下图所示:

3JMX控制台


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,如下图所示:

4JFR飞行记录器


收集有关 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的使用,希望本篇文章对大家有所帮助。

推荐↓↓↓
Java编程
上一篇:面试官:“谈谈Spring中都用到了那些设计模式?” 下一篇:Java性能监控和故障诊断可视化工具之二:jvisualvm