工具篇-性能分析工具JFR和JMC

image.png

软件简介

Java Flight Recorder和JDK Mission Control共同创建了一个完整的工具链,以不断收集低级别和详细的运行时信息,从而支持事后事件分析。java flight recorder是oraclejdk中内置的一个评测和事件收集框架。它允许Java管理员和开发人员收集有关Java虚拟机(JVM)和Java应用程序行为的详细底层信息。JDK任务控制是一套先进的工具,它能够对Java飞行记录器收集的大量数据进行有效而详细的分析。该工具链使开发人员和管理员能够从本地运行或部署在生产环境中的Java应用程序收集和分析数据。

JFR和JMC

JDK Mission Control

MC由以下客户端应用程序和插件组成:

JVM浏览器显示正在运行的Java应用程序及其JVM。
JMX控制台是一种用于监视和管理jvm的机制。它连接到正在运行的JVM,收集、实时显示其特性,并允许您通过托管bean(mbean)更改其一些运行时属性。您还可以创建在某些事件上触发的规则(例如,如果应用程序的CPU使用率达到90%,则发送电子邮件)。
Flight Recorder(JFR)是一种用于收集有关正在运行的Java应用程序的诊断和分析数据的工具。它被集成到JVM中,造成的性能开销非常小,因此可以在生产环境中使用。JFR不断地保存有关正在运行的应用程序的大量数据。此配置文件信息包括线程示例、锁配置文件和垃圾收集详细信息。JFR在逻辑分组的表格和图表中显示诊断信息。它允许您选择关注问题所需的时间范围和详细程度。当联系Oracle支持人员帮助诊断Java应用程序的问题时,JFR收集的数据是必不可少的。
jcmd实用程序或诊断命令用于向JVM发送诊断命令请求。这些请求对于管理来自Flight Recorder的记录、故障排除以及诊断JVM和Java应用程序非常有用。
插件有助于堆转储分析和DTrace记录。请参阅插件详细信息。JMC插件使用java management extensions(JMX)代理连接到JVM。有关JMX的更多信息,请参阅JMX技术主页。

jfr为JDK自带的工具,但是JMC需要我们自己去官网下载,选择对应的平台进行安装

下载链接:https://www.oracle.com/java/technologies/javase/products-jmc8-downloads.html

快速上手

开启 JFR 收集:  由于JFR是商用的,所以需要解锁Java程序的商业feature:

JDK 1.8u40之前版本,需再jvm启动前添加参数

1
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder

JDK 1.8u40之后版本,不需要在启动的时候通过flag来解锁了,可以动态的解锁

动态解锁 后可以运行许JFR采集任务

1
2
# 先通过jcmd命令查看你要进行监控的java程序pid
jcmd 18137 VM.unlock_commercial_features

检查是否已经成功开启

1
jcmd 18137 VM.check_commercial_features

输出:Commercial Features already unlocked.则表示已经开启,接下来就是启动采集任务,可设定指定时长。

采集 5min的 JFR任务(采集固定时长JFR任务)

1
jcmd 18137 JFR.start name=core_api_1 settings=profile delay=5s duration=5m filename="/home/mikey/jfr/core_api.jfr" compress=true  

检查任务是否在进行

1
jcmd 18137 JFR.check

另一种方式是一直采集数据

1
jcmd 18137 JFR.start name=core_api_2 settings=profile delay=5s duration=0 compress=true

转存 jfr 文件

1
jcmd 18137 JFR.dump name=zhibi_jfr_test2 filename="/home/mikey/jfr/core_api_2.jfr" compress=true

停止持续采集 JFR 任务

1
jcmd 18137 JFR.stop name=core_api_2  

通过JMC将jfr文件导入即可查看相关的数据情况

详细教程

TODO

参考资料

官方文档:https://docs.oracle.com/en/java/java-components/jdk-mission-control/8/user-guide/


工具篇-性能分析工具JFR和JMC
https://mikeygithub.github.io/2021/05/14/yuque/工具篇-性能分析工具JFR和JMC/
作者
Mikey
发布于
2021年5月14日
许可协议