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

JMX vs JFR:谁才是最强大的JVM监控利器?

大家好,我是小米!今天我们来聊一聊JVM监控系统,特别是关于JMX和JFR的使用。你是否有过在线上应用出现性能问题时,无法准确获取关键指标的困扰呢?那么,不妨听听我给大家带来的解决方案。

什么是JMX

首先,让我们来了解一下JMX是什么。JMX,全称为Java Management Extensions,是一套Java平台提供的管理和监控标准。通过JMX,我们可以动态地管理和监控Java应用程序、设备、系统以及网络服务等。它提供了一组API,允许我们以统一的方式操控和监视Java应用程序的运行时行为。JMX可以让我们轻松地获取JVM的运行状态、收集性能指标以及进行配置和管理。

什么是JFR

接下来,我们再来看看JFR(Java Flight Recorder)。JFR是Java SE的一个特性,它提供了低开销、低影响力的生产环境性能监控和故障诊断能力。相比于其他常用的监控手段,如jstack和jmap,JFR具有更低的性能开销和更详细的信息采集能力。正因为如此,JFR成为了许多开发者和运维人员的首选。

其他监控手段的问题

你可能会疑惑,为什么其他监控手段会影响线上应用的性能,而JFR却可以避免这个问题呢?原因在于,一些常用的监控手段,比如jstack和jmap,需要让JVM进入safepoint状态才能获取线程堆栈和内存使用情况等信息。而这样的操作会导致JVM暂停应用程序的执行,从而降低线上应用的性能。

此外,对于外部监控来说,例如通过JMX暴露接口进行信息采集,使用工具如jvisualvm,还涉及到RPC和网络消耗的问题。而且在JVM忙时,很可能无法及时采集到我们所需的关键指标,从而导致监控指标的断点。这些都是基于JVM的外部监控难以解决的问题。

为什么推荐使用JFR

因此,我强烈推荐使用JVM内部的监控能力,也就是JFR。它能够在JVM非常繁忙的情况下,仍然能够采集到有用的性能指标和故障诊断信息。JFR通过在JVM内部进行数据采集,可以实现非常低的性能开销,并提供丰富的信息采集能力。它能够实时记录CPU使用率、内存分配、垃圾回收、线程状态以及方法调用等关键指标,并以事件流的形式进行持久化。通过JFR,我们可以深入了解应用程序的运行情况,发现潜在的性能问题和瓶颈,并进行及时的故障诊断和性能优化。

除了性能监控和故障诊断外,JFR还具备事件的即时分析和回放能力。我们可以使用JFR的分析工具,如Java Mission Control(JMC),对采集到的事件数据进行可视化分析,找出应用程序的瓶颈和优化空间。而通过回放功能,我们可以在离线环境中重现问题现场,进行更加深入的故障排查和调优。

当然,JFR并非完美无缺。它在某些特殊场景下可能会产生一些额外的开销,比如磁盘空间的占用和事件采集的性能消耗。但总体来说,这些开销相对较小,不会对线上应用的性能造成明显的影响。而且,我们可以通过配置合适的采样率和持久化策略,来控制JFR的开销,以满足实际需求。

在实际的应用中,我们可以将JFR与其他监控手段结合起来,形成一个全面的监控体系。比如,我们可以使用JMX来收集一些常规的性能指标,而使用JFR来进行更加细致和全面的性能监控。通过灵活配置,我们可以根据具体的需求选择合适的监控手段,以达到最佳的监控效果。

如何使用JFR

要使用JFR进行监控和故障诊断,首先需要在JVM启动时启用JFR。可以通过在启动参数中添加以下选项来实现:

-XX:+UnlockCommercialFeatures -XX:+FlightRecorder

启用JFR后,JVM会自动开始记录事件数据。我们可以通过Java Mission Control(JMC)工具来进行事件数据的收集和分析。

在JMC中,我们可以连接到运行中的JVM实例,并打开JFR浏览器。在浏览器中,我们可以选择感兴趣的事件类型,并配置记录的持续时间、采样率等参数。然后,我们可以开始记录JFR事件。

记录完成后,我们可以停止记录,并使用JMC的分析工具进行数据分析。通过JFR的可视化界面,我们可以查看各种事件、线程的状态、方法调用、垃圾回收情况等详细信息。这些信息将帮助我们深入了解应用程序的性能状况,并找出潜在的问题和优化空间。

除了实时监控外,我们还可以将JFR事件数据保存到文件中,以便在离线环境中进行分析。这对于复现线上问题、进行深入调优和故障排查非常有帮助。

需要注意的是,JFR在JVM启动时启用后,会产生一些额外的开销,包括CPU和内存的消耗。因此,在生产环境中,我们需要仔细配置JFR的参数,确保其对应用程序的性能影响较小。可以根据具体需求调整事件的采样率、记录持续时间等参数。

END

总结一下,使用JFR进行JVM监控是一种高效、低开销的方法。通过启用JFR并结合Java Mission Control工具,我们可以实时监控应用程序的性能指标,并进行详细的故障诊断和性能优化。同时,JFR还具备事件数据的持久化和离线分析能力,方便我们在离线环境中进行问题排查和调优工作。

希望今天的分享能够对大家有所启发和帮助。如果你对JVM监控和JFR还有更多的疑问或者经验分享,欢迎在评论区留言讨论。感谢大家的阅读,我们下期再见!

 

相关文章:

JMX vs JFR:谁才是最强大的JVM监控利器?

大家好,我是小米!今天我们来聊一聊JVM监控系统,特别是关于JMX和JFR的使用。你是否有过在线上应用出现性能问题时,无法准确获取关键指标的困扰呢?那么,不妨听听我给大家带来的解决方案。 什么是JMX 首先&a…...

Laravel Collection 基本使用

创建集合 为了创建一个集合,可以将一个数组传入集合的构造器中,也可以创建一个空的集合,然后把元素写到集合中。Laravel 有collect()助手,这是最简单的,新建集合的方法。 $collection collect([1, 2, 3]);默认情况下…...

JUC并发编程19 | 读写锁

有一些关于锁的面试题: 你知道 Java 里面有哪些锁?读写锁的饥饿问题是什么?有没有比读写锁更快的锁?StampedLock知道嘛?(邮戳锁/票据锁)ReentrantReadWriteLock 有锁降级机制? Ree…...

springboot_maven项目怎么引入mybatis

在pom.xml文件中添加mybatis和mybatis-spring-boot-starter的依赖 org.mybatis mybatis ${mybatis.version} org.mybatis.spring.boot mybatis-spring-boot-starter ${mybatis.spring.version} 配置mybatis 在application.properties(或application.yml&#xff0…...

JAVA8的新特性——lambda表达式

JAVA8的新特性——lambda表达式 此处,我们首先对于Java8的一些特性作为一个简单介绍 Java 8是Java编程语言的一个重要版本,于2014年发布。Java 8引入了许多新特性和改进,以提高开发效率和性能。以下是Java 8的一些主要新特性: Lam…...

算法修炼之练气篇——练气六层

博主:命运之光 专栏:算法修炼之练气篇 前言:每天练习五道题,炼气篇大概会练习200道题左右,题目有C语言网上的题,也有洛谷上面的题,题目简单适合新手入门。(代码都是命运之光自己写的…...

利用GPU并行计算beta-NTI,大幅减少群落构建计算时间

1 先说效果 18个样本,抽平到8500条序列,4344个OTUs,计算beta-NTI共花费时间如下。如果更好的显卡,更大的数据量,节约的时间应该更加可观。 GPU(GTX1050):1分20秒 iCAMP包 的bNTIn.p(…...

Shiro框架漏洞分析与复现

Shiro简介 Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性,可以快速轻松地保护任何应用程序——从最小的移动应用程序到最大的 Web 和企业应用程序。 1、Shiro反序列…...

(数字图像处理MATLAB+Python)第七章图像锐化-第一、二节:图像锐化概述和微分算子

文章目录 一:图像边缘分析二:一阶微分算子(1)梯度算子A:定义B:边缘检测C:示例D:程序 (2)Robert算子A:定义B:示例C:程序 &a…...

C# | 内存池

内存池 文章目录 内存池前言什么是内存池内存池的优点内存池的缺点 实现思路示例代码结束语 前言 在上一篇文章中,我们介绍了对象池的概念和实现方式。对象池通过重复利用对象,避免了频繁地创建和销毁对象,提高了系统的性能和稳定性。 今天我…...

程序设计入门——C语言2023年5月10日

程序设计入门——C语言 1、window下安装gcc 课程来源:链接: 浙江大学 翁恺 程序设计入门——C语言 学习日期:2023年5月10日 1、window下安装gcc 如果想让gcc在windows下运行,需要将gcc,及对于的lib包,都安装到window…...

【2023华为OD笔试必会25题--C语言版】《03 单入口空闲区域》——递归、数组、DFS

本专栏收录了华为OD 2022 Q4和2023Q1笔试题目,100分类别中的出现频率最高(至少出现100次)的25道,每篇文章包括原始题目 和 我亲自编写并在Visual Studio中运行成功的C语言代码。 仅供参考、启发使用,切不可照搬、照抄,查重倒是可以过,但后面的技术面试还是会暴露的。✨✨…...

Grafana安装、升级与备份(02)

一、安装Grafana软件包 Grafana部署非常简单,直接使用yum命令从官网拉到安装再启动就可以了,本次使用的grafana版本为9.5.0 官网下载地址:Download Grafana | Grafana Labs # wget yum install -y https://dl.grafana.com/oss/release/grafana-9.5.0-1.x86_64.rpm # yum …...

【2023华为OD笔试必会25题--C语言版】《10 相同数字的积木游戏》——数组

本专栏收录了华为OD 2022 Q4和2023Q1笔试题目,100分类别中的出现频率最高(至少出现100次)的25道,每篇文章包括原始题目 和 我亲自编写并在Visual Studio中运行成功的C语言代码。 仅供参考、启发使用,切不可照搬、照抄,查重倒是可以过,但后面的技术面试还是会暴露的。✨✨…...

awk命令编辑

awk工作原理 逐行读取文本,默认以空格或tab键分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。 sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理。awk信息…...

Pinia和Vuex的区别

Pinia和Vuex都是Vue.js状态管理库 Pinia是一个轻量级的状态管理库,它专注于提供一个简单的API来管理应用程序的状态。 相比之下,Vuex是一个更完整的状态管理库,它提供了更多的功能,比如模块化、插件和严格模式等。 Pinia是基于V…...

《C++高并发服务器笔记——第四章Linux网络编程》

计算机网络等相关知识可以去小林coding进行巩固(点击前往) 《C高并发服务器笔记——第四章》 4.1、网络结构模式1.C/S结构①C/S结构简介②C/S结构优点③C/S结构缺点 2.B/S结构①B/S结构简介②B/S结构优点③B/S结构缺点 4.2和4.3、MAC地址、IP地址、端口…...

NFS服务器搭建(案例)

目录标题 第一个问题1.安装软件包2.进入配置文件进行定义,并创建对应的资源文件3.客户端进行挂载,并查看挂载信息,修改挂载权限4.客户端查看挂载的信息 第二个问题1.服务端配置文件进行定义,并创建对应资源文件2.客户端进行挂载3.…...

ubuntu 22.04 安装 Docker Desktop 及docker介绍

目录 一、Docker Desktop 安装 1、我们先去官网下载安装包 2、Install Docker Desktop on Ubuntu 3、Launch Docker Desktop 二、Docker 介绍 什么是docker 如何使用docker docker是如何工作的 docker build docker run docker pull 一、Docker Desktop 安装 1、我们先…...

微前端中的应用隔离是什么,一般是怎么实现的?

微前端中的应用隔离是什么,一般是怎么实现的? 前言一、iframe 隔离二、Web Components三、JavaScript 沙箱隔离四、Shadow DOM 隔离总结 前言 微前端中的应用隔离是指将不同的微前端应用程序隔离开来,以确保它们之间不会相互影响或干扰。这种隔离可以通…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

ios苹果系统,js 滑动屏幕、锚定无效

现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

ip子接口配置及删除

配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...