文档章节

JFR-Java应用的黑匣子

开源大龄码农
 开源大龄码农
发布于 03/27 10:50
字数 1410
阅读 44
收藏 0

JFR是什么

JSR,全称Java Flight Recorder,翻译过来就是java 飞行记录器。和飞机上的黑匣子类似,用于记录Java应用运行过程中的各种事件及数据。而后,使用相应的工具来分析产生的数据,一般使用JMC, java Mission Control。

JFR是oracle jdk的商业特性,因此需要有licence才用于商业用途。个人自己玩玩的话,无所谓了。

启动

因为JFR是商业特性,所以,在应用启动时,需加上相关的参数,才可以使用。

java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder MyApp

运行JFR有两种方式,每种方式都需要应用启动时加入上述两个参数。

plan A

在应用启动时,加入JFR监控

java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=duration=60s,filename=myrecording.jfr MyApp
planB

更加灵活的诊断应用,启动时无需加上JFR诊断参数,需要诊断时,使用JFR相关命令对特定的jvm进程监控

首先,必不可少的,需要在应用启动时加入如下参数

java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder MyApp

而后,使用JFR命令,启动监控

jcmd <jvm pid> JFR.start duration=60s filename=myrecording.jfr

让子弹飞一会··········

jcmd <jvm pid> JFR.stop

简要介绍下两个参数, filename: jfr产生的数据记录到的文件 duration:持续监控诊断时间

诊断分析

有了数据文件,我们可以使用jdk自带的jmc工具分析数据文件。

初始打开文件后,首页会显示概要分析,也就是一些分析建议。 比如上述

  1. 发现内存占用已达到97.9%,建议增大内存
  2. 发现物理机上有其他进程正在运行,如果是服务器环境,建议在该计算机上只运行关键进程会更好

继续往下看;

从上可以看到很多信息,大致分为4类

  1. Java应用程序,此部分主要为应用程序相关的数据,包括线程、内存对象、文件IO、方法概要分析等
  2. JVM内部,主要为垃圾回收、类加载等等
  3. 环境,jvm配置参数、系统属性等

JFR原理

有人在怀疑,在生产环境开启JFR是否会有影响,影响是肯定有的,但不会大,官方给出的是3%,实际运行过程中发现<1%.为何会如此高效呢,下图是从官网摘出来的。

JFR是基于事件驱动,异步收集数据,所有的事件数据首先写入当前线程的buffer中,也就是ThreadLocal,无竞争!threadlocal buffer满了之后,再写到Global buffer中,注意,此处是有竞争的;当前两处均为内存中。当global buffer满了之后会再写到本地磁盘文件中。

原文如下:

Understanding Data Flow

JFR collects data from the JVM (through internal APIs) and from the Java application (through the JFR APIs). This data is stored in small thread-local buffers that are flushed to a global in-memory buffer. Data in the global in-memory buffer is then written to disk. Disk write operations are expensive, so you should try to minimize them by carefully selecting the event data you enable for recording. The format of the binary recording files is very compact and efficient for applications to read and write.

There is no information overlap between the various buffers. A particular chunk of data is available either in memory or on disk, but never in both places. This has the following implications:

Data not yet flushed to a disk buffer will not be available in the event of a power failure.

A JVM crash can result in some data being available in the core file (that is, the in-memory buffer) and some in the disk buffer. JFR does not provide the capability to merge such buffers.

There may be a small delay before data collected by JFR is available to you (for example, when it has to be moved to a different buffer before it can be made visible).

The data in the recording file may not be in time sequential order as the data is collected in chunks from several thread buffers.

In some cases, the JVM drops the event order to ensure that it does not crash. Any data that cannot be written fast enough to disk is discarded. When this happens, the recording file will include information on which time period was affected. This information will also be logged to the logging facility of the JVM.

You can configure JFR to not write any data to disk. In this mode, the global buffer acts as a circular buffer and the oldest data is dropped when the buffer is full. This very low-overhead operating mode still collects all the vital data necessary for root-cause problem analysis. Because the most recent data is always available in the global buffer, it can be written to disk on demand whenever operations or surveillance systems detect a problem. However, in this mode, only the last few minutes of data is available, so it only contains the most recent events. If you need to get the full history of operation for a long period of time, use the default mode when events are written to disk regularly.

Java Flight Recorder Architecture

JFR is comprised of the following components:

JFR runtime is the recording engine inside the JVM that produces the recordings. The runtime engine itself is comprised of the following components:

The agent controls buffers, disk I/O, MBeans, and so on. This component provides a dynamic library written in C and Java code, and also provides a JVM-independent pure Java implementation.

The producers insert data into the buffers. They can collect events from the JVM and the Java application, and (through a Java API) from third-party applications.

Flight Recorder plugin for Java Mission Control (JMC) enables you to work with JFR from the JMC client, using a graphical user interface (GUI) to start, stop, and configure recordings, as well as view recording files.

至此,就简单的介绍完了!

备注:

  1. 在Mac OS 上,java 1.8x版的jmc启动后不可用,此问题是oracle的问题,可以使用jdk7或者jdk9及更高版本jdk来分析数据

Java Mission Control 5.5 Release Notes

Java Mission Control from JDK 1.8.0_161 frozen upon startup on Mac OS X

  1. 或者你也可以单独安装JMC JDK Mission Control (JMC) 7 Downloads
  2. 官方介绍文档

© 著作权归作者所有

开源大龄码农
粉丝 7
博文 19
码字总数 10436
作品 0
大兴
高级程序员
私信 提问
加载中

评论(0)

“龙井”开箱评测 |Alibaba Dragonwell 新手指南

作者|阿里云智能事业群 高级技术专家 陆传胜 阿里巴巴有着最丰富的 Java 应用场景,覆盖电商,金融,物流等众多领域,是世界上最大的 Java 用户之一。 2019 年 3 月 21 日,阿里巴巴在北京云...

阿里系统软件技术
2019/04/04
0
0
GraalVM 19.2 发布,高性能跨语言虚拟机

GraalVM 19.2 发布了。GraalVM 是高性能跨语言虚拟机,用于运行 JavaScript、Python 3、Ruby、R、基于 JVM 的语言,如 Java、Scala、Kotlin 和基于 LLVM 的语言,如 C 和 C++。 该版本带来了...

afterer
2019/08/22
5.5K
16
JVM性能调优实践——JVM篇

前言 在遇到实际性能问题时,除了关注系统性能指标。还要结合应用程序的系统的日志、堆栈信息、GClog、threaddump等数据进行问题分析和定位。关于性能指标分析可以参考前一篇JVM性能调优实践...

lijingyao8206
2018/05/24
0
0
Oracle Java Mission Control 帮助

缩写 含义 JDK Java 开发工具包 JDP Java Discovery Protocol JFR Java 飞行记录器 JMC Java Mission Control JMX Java Management Extensions JVM Java 虚拟机 MBean 托管 Bean (Java) RCP ......

光斑
2018/04/27
546
0
Java Flight Recorder小试牛刀

序 本文主要研究一下Java Flight Recorder的使用。 命令 主要有5个命令,configure、check、start、dump、stop。执行顺序的话,先start再dump,最后stop。 JFR.configure 参数 描述 值类型 ...

go4it
2018/09/27
87
0

没有更多内容

加载失败,请刷新页面

加载更多

Apache OpenMeetings开源线上会议系统——安装配置

OpenMeetings是一个开源的在线会议系统,支持音频和视频,同时支持桌面分享。 官网地址:http://openmeetings.apache.org/index.html 安装 当前版本为4.0.6,需要最低jre8的安装环境。 下载a...

JustForFly
27分钟前
21
0
Android知识体系总结2020之Android部分Handler篇

1.什么是Handler?   Handler是可以通过发送和处理Message和Runnable对象来关联相应线程的MessageQueue。通常我们认为它是一种异步机制。   a.可以让对应的Message和Runnable在未来的某个...

ClAndEllen
28分钟前
29
0
命令模式

命令模式(Command Pattern)在我们生活中非常常见,比如开关灯、电视遥控器换台等。 我们使用摇控器换台的时候,我们按下一个换台的按钮,然后电视机就会换台,按下调整音量调节按钮,电视机...

鸣沙山
31分钟前
30
0
基于 rsync 和 ln 实现“写时复制”的快照备份功能

一、基本原理 这里“写时复制”加了一个引号,因为这是专门针对使用rsync备份时的写时复制效果,而不是事实上的写时复制(copy-on-write),其达到的目的如下: 使用 rsync 备份数据后,立即...

Inpool
今天
28
0
郑州哪哪里可以开工程款发票-郑州_新闻网

【电薇同步;1.3.8 - 2.7.4.1 - 5.2.9.7.】张生、诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridge,是Android手机通用...

yyqqvip
今天
30
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部