java应用性能优化——使用JMC(Java Mission Control)分析性能

前言

官方文档:https://docs.oracle.com/javacomponents/jmc-5-5/jmc-user-guide/intro.htm#JMCCI109

Java Mission Control使您能够监视和管理Java应用程序,而不会引入通常与这些类型的工具相关联的性能开销。它使用为Java虚拟机(JVM)的常规自适应动态优化收集的数据。除了最小化性能开销之外,这种方法还消除了观察器效应的问题,当监视工具改变系统的执行特性时会发生这种问题。

Java Mission Control由客户端应用程序(JMC客户端)和在其上运行的许多插件组成:

JVM Browser显示正在运行的Java应用程序及其JVM。每个JVM实例都称为JVM连接。

JMX Console连接到正在运行的JVM,实时收集和显示其特征,并允许您通过Managed Beans(MBean)更改某些运行时属性。您还可以创建触发某些事件的规则(例如,如果应用程序的CPU使用率达到90%,则发送电子邮件)。

Java Flight Recorder(JFR)收集并保存详细的性能特征,以进行历史分析和分析。它可以用作独立的性能监视和分析工具,但是当用作JMC客户端的插件时,它会在逻辑分组的表,图表和拨号中显示诊断信息。它使您可以选择专注于问题所需的时间范围和详细程度。

Java Mission Control插件使用Java Management Extensions(JMX)代理连接到JVM。

启动介绍

JMC客户端可执行文件位于binJava SE Development Kit(JDK)安装路径(JAVA_HOME)的目录中。如果JAVA_HOME/bin目录位于PATH环境变量中,则可以通过jmc在命令行提示符(shell)中输入来启动JMC客户端。否则,您必须指定JMC可执行文件的完整路径:
JAVA_HOME\bin\jmc.exe
JAVA_HOME/bin/jmc (Linux,OS X)

注意:
1、在Windows上,JMC客户端可执行文件的快捷方式将添加到“ 开始”菜单中“ 所有程序”下的“ Java Development Kit”文件夹中。
2、在OS X上,如果在Spotlight中找不到JMC可执行文件或找到JMC,则可以使用/Library/Java/JavaVirtualMachines/jdk<版本从命令行启动JMC >.jdk/Contents/Home/bin/jmc。或者,使用Finder浏览到/Library/Java/JavaVirtualMachines/jdk<版本,>.jdk/Contents/Home/lib/missioncontrol然后双击Java Mission Control应用程序。
3、在OS X上,当您启动JMC可执行文件时,将打开“终端”窗口。当您关闭JMC客户端时,终端会留下文本[Process completed]。要避免这种情况,请打开“终端首选项”,然后打开“ 设置”选项卡,选择您使用的方案,然后选择“ Shell”选项卡,如果shell干净地退出,则将“shell退出时”选项更改为“ 关闭”。

将JVM选项传递给JMC Launcher

JMC是一个Java应用程序,JMC客户端可执行文件是此应用程序的启动程序。JMC启动由jmc.ini文件中指定的选项控制,该选项位于JAVA_HOME/bin目录中。参数给-vmargs的选项中的jmc.ini文件是传递到运行JMC应用JVM选项。您可以指定这些选项来控制此JVM的运行方式。如果您不想修改该jmc.ini文件,可以在命令行上指定JVM选项作为-vmargs该jmc命令选项的参数。

注意:

如果为该jmc命令指定了其他选项,则-vmargs必须最后指定该选项。
要使用您自己的一组JVM选项启动JMC客户端(覆盖jmc.ini文件中指定的那些选项),请运行以下命令(使用空格分隔多个参数):

jmc -vmarg 参数

要使用其他JVM选项启动JMC客户端(将它们附加到jmc.ini文件中指定的选项),请运行以下命令(使用空格分隔多个参数):

jmc --launcher.appendVmargs -vmarg 参数

使用工作区目录

如果要将JMC客户端的设置复制到另一台计算机或其他用户,或者为不同的应用程序使用不同的预定义设置,请在启动JMC客户端时添加-data命令行选项并定义工作空间目录:

jmc -data workspace-directory

使用案例

调试本地应用

前提,本地环境已经安装java,并且配置了环境变量。

1、启动JMC应用

打开cmd窗口,输入jmc命令,会打开jmc应用
在这里插入图片描述

2、进入JMC控制台

可以看到jmc默认展示本地的jvm应用 ,也可以连接远程jvm应用。但是我们的应用一般跑在服务器,需要使用远程连接到jvm应用上。

远程连接应用

例如,远程启动一个spring boot web服务,修改start.sh启动脚本文件,添加对应配置:

 -Dcom.sun.management.jmxremote.port=7001
 -Dcom.sun.management.jmxremote 
 -Dcom.sun.management.jmxremote.authenticate=false 
 -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=your ip

并且可以加以下参数,开启JFR调试,UnlockCommercialFeatures 代表启用商用特性,官方文档中说,生产环境使用需要授权,可忽略提示使用。

-XX:+UnlockCommercialFeatures  -XX:+FlightRecorder

如何不加参数或者java版本过低,点击启动JFR,则会出现以下错误
在这里插入图片描述
添加对应的启动配置后,启动应用。
例如下图所示:
在这里插入图片描述

启动应用后,检查应用是否正常启动,并且检查对应tcp端口是否正常:
在这里插入图片描述

然后,通过点击JMC控制台的菜单打开并创建远程连接。操作如下:
1、文件
2、连接
3、创建新连接
4、配置远程ip和port
5、测试连接
6、完成,进入控制台页面

在这里插入图片描述

3、JMX应用使用

右键对应jvm应用,可以看到以下选项

  • 启动JMX控制台
  • 启动飞行记录(JFR-java flight record)
  • 远程控制JMX代理
  • 属性
    在这里插入图片描述

3.1、使用应用- 属性

在这里插入图片描述
如上图所示:可查看jvm应用的启动main类、进程pid、连接名称。

3.2、使用应用- JMX控制台

打开jmx控制台后,应用右边默认进入概况视图。接下来介绍JMX控制的使用。

概况

在这里插入图片描述
通过概况可以查看以下信息:
处理器

信息说明
JVM CPU Usagejvm cpu使用率
Machine CPU Usage系统cpu使用率

内存

信息说明
Committed Java Head提交java堆大小
Maxinum Java Heap最大的java 堆大小
Total Physical Memory服务器物理内存总和
Used Java Heap Memoryjava堆内存使用大小
Used Physical Memory服务器物理内存使用大小

同时还可以定制自己关注视图,在概况的右边有+号添加对应视图。创建自己视图后,可以通过该视图菜单栏的+按钮添加对应Mbean信息。

Mbean浏览器

在这里插入图片描述
Mbean是jvm可提供给JMC控制台的系统信息,这些Bean的状态有可能会跟随系统的运行而变化的。可根据自己需要关注的Mbean信息,添加到自己创建视图。

触发器

在这里插入图片描述
通过触发器方便对系统一个状态阈值进行监控提醒。

系统

在这里插入图片描述
通过系统视图,可以查看jvm应用的配置信息,可以通过名称过滤查看java的的属性,例如:java.class. 可以查看java 应用配置类路径。

内存

在这里插入图片描述
通过内存视图查看堆直方图(不懂什么意思),
gc表的信息,比较重要。

线程

在这里插入图片描述

诊断

在这里插入图片描述

3、JFR(Java Flight Recoder)飞行记录使用

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐