当前位置: 首页 > news >正文

About JDKFlightRecorder--人工翻译

JFR是什么

JDK Flight Recorder是一个工具,用于收集有关JVM以及在JVM上运行的Java程序的诊断和分析数据。

  • 集成到Java虚拟机(JVM)中,
  • 使用默认设置时,性能影响小于1%。几乎不产生性能开销,因此即使在负载很重的生产环境中也可以使用。

JFR的优点

提供更好用的数据:JFR使用的一致数据模型使交叉引用和过滤事件变得更容易

允许第三方程序提供事件:一组API允许JFR监视第三方应用程序,包括WebLogic Server和其他Oracle产品。

降低企业成本:JFR使您能够花费更少的时间诊断和排除故障,减少运营成本和业务中断,在出现问题时提供更快的解决时间,并提高系统效率。

JFR使用场景

profilling(程序画像分析):JFR持续保存有关运行系统的大量数据。这些分析信息包括线程样本(显示程序在何处花费时间)、锁分析和垃圾收集等详细信息。

Black Box Analysis(黑盒分析):JFR不断地将信息保存到循环缓冲区中。当检测到异常时可以访问该信息以查找原因。

Support and Debugging(官方支持与调试):在联系Oracle官方支持以帮助诊断Java应用程序的问题时,JFR收集的数据可能是必不可少的。

JFR事件

Event(事件),是JFR的基石,JFR基于事件收集数据,事件在JVM或Java程序中的特定时间点发生。每个事件都有名称、时间戳和可配置的有效负载。有效负载是与事件关联的数据,例如,CPU使用率、事件前后的Java堆大小、锁保持器的线程ID等等。大多数事件还包含事件的所属线程、堆栈跟踪以及持续时间等信息。借助事件提供的信息,可以重新构建出JVM和Java程序运行时的详细信息。

JFR事件根据采集方式可以分为三种

  • 持续时间事件:需要一定时间去发生,并在结束时进行记录的事件。你可以为持续时间事件设置阈值,以便只记录持续时间超过阈值的事件。这对于其他类型的事件是不可能的
  • 即时事件:发生时立即记录
  • 样本事件,也叫做可请求事件(requestable event)。以周期性记录样本事件来获取系统活动样本。其中这个采样频率是可配置的。

JFR以极高的细节水平监控运行中的系统。这会产生大量的数据。要使开销尽可能低,建议将JFR监控的事件类型限制为您实际需要的类型。在大多数情况下,持续时间非常短的事件是无意义的,因此建议将JFR监控持续时间设置为高于对于事件来说有意义的阈值。

JFR数据流

二进制格式的JFR记录文件对于应用程序的读写是非常紧凑和高效的。

JFR从JVM(通过内置API)和Java程序(通过JFR API)收集数据。这些数据被存储在小型线程本地缓冲区中,然后再被刷新到全局内存缓冲区中,最后,再被写入磁盘。磁盘的写入操作开销很大,所以你应该小心地选择需要被JFR监控的事件来减少磁盘的写入操作。

在各种缓冲器之间没有信息重叠。一个数据块可以在内存或磁盘中使用,但不能同时在这两个地方使用。这会导致:

  • 如果电源突然故障,尚未刷新到磁盘缓冲区的数据会丢失。

  • JVM崩溃可能会导致核心文件(即内存缓冲区)或磁盘缓冲分区中的一些数据可用。但JFR不提供合并这些缓冲区的功能。

  • 在JFR收集的数据可供使用之前,会有一些延迟(例如,在使其可见之前,必须将其移动到不同的缓冲区)。

  • JFR记录文件中的数据可能不是按时间顺序排列的,因为数据是从多个线程缓冲区中以块的形式收集的。

在某些情况下,JVM会删除一些事件的顺序以确保JVM不会崩溃。任何无法快速写入磁盘的数据都将被丢弃。发生这种情况时,JFR记录文件将包含有关受影响时间段的信息。此信息也将记录到JVM的日志记录工具中

JFR可以配置为不向磁盘写入数据。在此模式下,全局缓冲区作为一个循环缓冲区来使用,当缓冲区满时丢弃日期最早的数据。这种开销非常低的模式仍然收集根本原因问题分析所需的所有重要数据。虽然全局缓冲区中只保存最新数据,但是通过操作或者当监控系统检测到问题时仍然可以把数据根据需要写入磁盘。在此模式下,只有最后几分钟的数据可用,因此它只包含最近的事件。如果需要获取长时间内的完整操作历史记录,请在事件写入磁盘时使用默认模式。

JFR架构

JFR由以下两个组件构成

  • JFR运行时引擎:在JVM内部产生监控记录的引擎

    JFR运行时引擎又由下面两个组件构成

    • 资源代理:控制缓冲区、磁盘的I/O、MBean等资源。此组件还提供了一个由C和Java代码编写的动态库,还提供了一个与JVM无关的纯Java实现
    • 数据生产者:从JVM以及Java程序或者通过一个JavaApi从第三方应用程序收集事件数据
  • 用于JMC的JFR插件,使您能够从JMC客户端使用图形化界面启动、停止以及配置JFR监控,以及对监控产生的JFR文件的查看

相关文章:

About JDKFlightRecorder--人工翻译

JFR是什么 JDK Flight Recorder是一个工具,用于收集有关JVM以及在JVM上运行的Java程序的诊断和分析数据。 集成到Java虚拟机(JVM)中,使用默认设置时,性能影响小于1%。几乎不产生性能开销,因此即使在负载很…...

【计算机系统基础3】数据的存储与运算

【计算机系统基础3】数据的存储与运算 3.程序调试与实践:数据存储与运算3.1真值与机器数3.1.1整数的编码 3.2数据的存储3.3数组的对齐3.4数据类型的转换3.4.1整数之间的数据类型转换3.4.2整数与浮点数之间的转换3.4.3自动类型转换 3.5浮点数的表示和运算--IEEE 7543…...

【算法】快速排序

目录 核心思想: 过程: 演示: 第一趟: 第二趟: 代码: 核心思想: 从待排序列中取一个元素作为中心,所有比它小或相等的元素一律放在前面, 所有比它大的元素放在后面&…...

【移动端网页布局】流式布局案例 ③ ( 实现搜索栏功能 | 伪元素选择器 | 子绝父相 | 外边距塌陷处理 | 二倍精灵图处理方案 )

文章目录 一、搜索栏样式及核心要点1、实现效果2、自动伸缩搜索栏实现3、搜索栏父容器设置4、搜索栏左右两侧的按钮盒子5、搜索栏盒子6、二倍精灵图处理方案 二、完整代码示例1、HTML 标签结构2、CSS 样式3、展示效果 一、搜索栏样式及核心要点 1、实现效果 上一篇博客中 , 完成…...

【C++修炼之路】30.可变参数模板包装器

每一个不曾起舞的日子都是对生命的辜负 C11之可变参数模板&&包装器 前言一.可变参数模板的首次登场二.参数包展开2.1 递归函数方式展开参数包2.2 逗号表达式展开参数包 三.容器的emplace方法四.包装器4.1 什么是function4.2 function包装器的作用4.3 function的实际用途…...

Linux防火墙之firewalld基础

一、firewalld概述 firewalld防火墙是Centos7系统默认的防火墙管理工具,取代了之前的iptables防火墙,也是工作在网络层,属于包过滤防火墙。 firewalld和iptables都是用来管理防火墙的工具(属于用户态)来定义防火墙的…...

GitLab CI/CD

CI/CD 简介 CI/CD 简单来说就是可以自动化编译、测试、打包我们的代码。 GitLab CICD的使用 首先需要安装gitlab-runner。 在GitLab 中,runners 是运行 CI/CD 作业的代理。我们的对代码的作业都是在runner上去执行的。我们可以在本地、服务器、等任意一个联网设…...

PHP复习资料(未完待续)

(未完待续,请持续关注此板块) 【计科三四】雪课堂PHP期末模拟题:https://ks.wjx.top/vm/tUAmjxq.aspx# 【计科一二】PHP第一章练习题 https://ks.wjx.top/vm/QnjHad4.aspx# 【计科一二】PHP第二章练习题 https://ks.wjx.top/vm/h2…...

【python】pytorch包(第二章)API使用与介绍

1> nn.Module (用于构建模型的底层逻辑) 介绍 nn.Module 是 torch.nn 中的一个类,是pytorch中自定义网络的基类 __init__需要调用super方法,继承父类属性和方法forward方法必须实现,用来定义网络的向前计算的过程…...

Linux驱动基础(SR501人体感应模块)

文章目录 前言一、SR501模块介绍二、设备树编写三、驱动编写1.确定主设备号2.编写file_operations结构体3.注册file_operations结构体4.出口函数编写5.probe函数和remove函数编写6.中断编写7.测试程序编写8.全部驱动程序 总结 前言 本篇文章将给大家介绍一下SR501驱动程序的编…...

Android Studio Flamingo (火烈鸟) 升级踩坑记录

由于想要验证Compose最新的debug特性,而我目前使用的版本(Dolphin 小海豚)不支持,查看官网说明需要最新版本,所以不得已进行了一下Android Studio版本升级,过程中遇到一些问题,本文仅做记录。&a…...

【JAVA凝气】异常篇

哈喽~大家好呀,这篇来看看JAVA异常篇。 目录 一、前言 二、Exception 异常 1、Java 的非检查性异常 2、Java 检查性异常类 三、Error 错误 四、捕获异常 五、多重捕获块 六、throws/throw 关键字 七、自定义异常类 八、图书推荐 一、前言 异常是程序中的一…...

C++中的函数模板

目录 1. 什么是函数模板? 2. 如何定义函数模板? 3. 如何使用函数模板? 4. 函数模板与函数重载的区别是什么? 5. 函数模板与类模板有何异同点? 1. 什么是函数模板? - 函数模板是一种通用的函数描述&…...

MapReduce【Shuffle-Combiner】

概述 Conbiner在MapReduce的Shuffle阶段起作用,它负责局部数据的聚合,我们可以看到,对于大数据量,如果没有Combiner,将会在磁盘上写入多个文件等待ReduceTask来拉取,但是如果有Combiner组件,我们…...

postman接口自动化测试

Postman除了前面介绍的一些功能,还有其他一些小功能在日常接口测试或许用得上。今天,我们就来盘点一下,如下所示: 1.数据驱动     想要批量执行接口用例,我们一般会将对应的接口用例放在同一个Collection中&#xf…...

历经70+场面试,我发现了大厂面试的套路都是···

今年的金三银四刚刚过去,我又想起了我在去年春招时面试了50余家,加上暑期实习面试了20余家,加起来也面试了70余场的面试场景了。 基本把国内有名的互联网公司都面了一遍,不敢说自己的面试经验很丰富,但也是不差的。 …...

可视区域兼容性问题的思考及方法封装

今日在复习可视化尺寸获取时突发奇想,为什么要在怪异模式下使用document.body.clientWidth,在标准模式下使用document.documentElement.clientWidth?以及是否在IE8及以下的版本中其中一个获取方式将返回undefined或0。  出于该问题的思考&am…...

安全工具 | CMSeeK [指纹识别]

0x00 免责声明 本文仅限于学习讨论与技术知识的分享,不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本文作者不为此承担任何责任,一旦造成后果请自行承担…...

Android新logcat使用技巧

Android新logcat使用技巧 logcat新UI出现后,我常困惑于怎么过滤log,和以前的UI差异比较大,新UI界面结构如下: 这个新的 logcat 的问题是如何过滤信息并不是很明显。 获取应用的日志信息 要获取我们当前调试应用的日志信息&…...

使用Makefile笔记总结

文章目录 一、简单了解Makefile1.1 Makefile示例1.2 基本规则1.3 make是如何工作的1.4 使用变量1.5 make自动推导 二、变量2.1 变量的定义和引用2.2 变量的两种高级用法2.3 override 和 define 关键字2.4 环境变量与目标变量2.5 自动变量 三、Makefile规则3.1 通配符3.2 目标依…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...