一、Java Mission Control简介
1、前言
官方文档: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。
2、启动介绍
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退出时”选项更改为“ 关闭”。
3、将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
二、使用案例
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 Usage | jvm cpu使用率 |
Machine CPU Usage | 系统cpu使用率 |
内存
信息 | 说明 |
---|---|
Committed Java Head | 提交java堆大小 |
Maxinum Java Heap | 最大的java 堆大小 |
Total Physical Memory | 服务器物理内存总和 |
Used Java Heap Memory | java堆内存使用大小 |
Used Physical Memory | 服务器物理内存使用大小 |
同时还可以定制自己关注视图,在概况的右边有+号添加对应视图。创建自己视图后,可以通过该视图菜单栏的+按钮添加对应Mbean信息。
-
Mbean浏览器
Mbean是jvm可提供给JMC控制台的系统信息,这些Bean的状态有可能会跟随系统的运行而变化的。可根据自己需要关注的Mbean信息,添加到自己创建视图。
-
触发器
通过触发器方便对系统一个状态阈值进行监控提醒。
-
系统
通过系统视图,可以查看jvm应用的配置信息,可以通过名称过滤查看java的的属性,例如:java.class. 可以查看java 应用配置类路径。
-
内存
通过内存视图查看堆直方图(不懂什么意思),
gc表的信息,比较重要。 -
线程
可以通过线程筛选进行cpu使用率分析、栈使用率分析
选中线程的堆栈跟踪,可以清楚看到执行过程 -
诊断
4、飞行记录器
一分钟后可查看记录数据,通过这些数据,可以清楚的了解到这一分钟时间内,整个操作系统以及JVM的所有数据情况。