【JVM】Java工具(Arthas,APM,Java Agent,JMX)

Java工具

常见的Java工具有以下几类:

1、诊断类工具,如Arthas、VisualVM等。

2、开发类工具,如Idea、Eclipse。

3、APM应用性能监测工具,如Skywalking、Zipkin等。

4、热部署工具,如Jrebel等。

Arthas中 Java Agent技术

Java Agent技术是JDK提供的用来编写Java工具的技术,使用这种技术生成一种特殊的jar包,这种jar包可以让Java程序运行其中的代码。

在这里插入图片描述

Java Agent技术实现了让Java程序执行独立的Java Agent程序中的代码,执行方式有两种:

静态加载模式

静态加载模式可以在程序启动的一开始就执行我们需要执行的代码,适合用APM等性能监测系统从一开始就监控程序的执行性能。静态加载模式需要在Java Agent的项目中编写一个premain的方法,并打包成jar包。

接下来使用以下命令启动Java程序,此时Java虚拟机将会加载agent中的代码并执行。

在这里插入图片描述

premain方法会在主线程中执行:

在这里插入图片描述

动态加载模式

动态加载模式可以随时让java agent代码执行,适用于Arthas等诊断系统。动态加载模式需要在Java Agent的项目中编写一个agentmain的方法,并打包成jar包。

在这里插入图片描述

接下来使用以下代码就可以让java agent代码在指定的java进程中执行了。

agentmain方法会在独立线程中执行:

在这里插入图片描述
在这里插入图片描述

简化版的Arthas

内存使用情况 JMX技术

JDK从1.5开始提供了Java Management Extensions (JMX) 技术,通过Mbean对象的写入和获取,实现:

运行时配置的获取和更改

应用程序运行信息的获取(线程栈、内存、类信息等)

在这里插入图片描述

获取JVM默认提供的Mbean可以通过如下的方式,例如获取内存信息:

在这里插入图片描述

ManagementFactory提供了一系列的方法获取各种各样的信息:

在这里插入图片描述

方法的执行参数和耗时

Spring AOP是不是也可以实现类似的功能呢?

Spring AOP 确实可以实现统计方法执行时间,打印方法参数等功能,但是使用这种方式存在几个问题:

代码有侵入性,AOP代码必须在当前项目中被引入才能完成相应的功能。

无法做到灵活地开启和关闭功能。

与Spring框架强耦合,如果项目没有使用Spring框架就不可以使用。

所以使用Java Agent技术 + 字节码增强技术,就可以解决上述三个问题。

ASM字节码增强技术

字节码增强框架是在当前类的字节码信息中插入一部分字节码指令,从而起到增强的作用。

ASM是一个通用的 Java 字节码操作和分析框架。它可用于直接以二进制形式修改现有类或动态生成类。ASM重点关注性能。让操作尽可能小且尽可能快,所以它非常适合在动态系统中使用。ASM的缺点是代码复杂。

ASM的官方网址:https://asm.ow2.io/

太复杂了,没有实现打印方法执行参数和耗时。

Byte Buddy字节码增强技术

Byte Buddy 是一个代码生成和操作库,用于在 Java 应用程序运行时创建和修改 Java 类,而无需编译器的帮助。 Byte Buddy底层基于ASM,提供了非常方便的 API。

在这里插入图片描述

Byte Buddy官网: https://bytebuddy.net/

APM系统的数据采集

Application performance monitor (APM) 应用程序性能监控系统是采集运行程序的实时数据并使用可视化的方式展示,使用APM可以确保系统可用性,优化服务性能和响应时间,持续改善用户体验。常用的APM系统有Apache Skywalking、Zipkin等。

Skywalking官方网站: https://skywalking.apache.org/

总结

Arthas这款工具用到了什么Java技术?

Arthas主要使用了Java Agent技术,这种技术可以让运行中的Java程序执行Agent中编写的代码。

Arthas使用了Agent中的动态加载模式,可以选择让某个特定的Java进程加载Agent并执行其中的监控代码。监控方面主要使用的就是JMX提供的一些监控指标,同时使用字节码增强技术,对某些类和某些方法进行增强,从而监控方法的执行耗时、参数等内容。

APM系统是如何获取到Java程序运行中的性能数据的?

APM系统比如Skywalking主要使用了Java Agent技术,这种技术可以让运行中的Java程序执行Agent中编写代码。

Skywalking编写了Java Agent,使用了Agent中的静态加载模式,使用字节码增强技术,对某些类和某些方法进行增强,从而监控方法的执行耗时、参数等内容。比如对Controller层方法增强,获取接口调用的时长信息,对数据库连接增强,获取数据库查询的时长、SQL语句等信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/591396.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[笔试训练](十二)

目录 034:删除公共字符串 035:两个链表的第一个公共节点 036:mari和shiny 034:删除公共字符串 删除公共字符_牛客题霸_牛客网 (nowcoder.com) 题解: 用哈希记录好第二个字符串中的字符,再遍历一遍第一个字符串,只将没有记录的字符加在结果字符串上。…

ASP.NET网络在线考试系统

摘 要 随着计算机技术的发展和互联网时代的到来,人们已经进入了信息时代,也有人称为数字化时代。数在数字化的网络环境下,学生希望得到个性化的满足,根据自己的情况进行学习,同时也希望能够得到科学的评价&#xff0c…

文件API及其操作

这里介绍两类文件操作、三个文件类。包括文件系统操作(File类)、文件内容操作(操作字节流、操作字符流) 1.文件类File 1.1.认识File类 (1)什么是File类呢?其实就是可以操作文件的一个类。通过…

STM32数字示波器+详细注释+上位机程序+硬件

目录 1、设计指标: 2、功能: 3、上位机的程序 ​4、测试的照片 5、PCB 6、模拟电路板 7、程序 资料下载地址:STM32数字示波器详细注释上位机程序硬件 1、设计指标: 主控: STM32…

【面试经典 150 | 字典树】添加与搜索单词 - 数据结构设计

文章目录 写在前面Tag题目来源解题思路方法一:字典树 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回…

大功率双向直流电源的输出电压和电流

双向直流电源(Bidirectional DC Power Supply)是一种具有双向输出电能的直流电源。与传统的直流电源相比,双向直流电源在输出电能的同时,还具备一定的电流输入能力,从而使其应用范围更加广泛。大功率双向直流电源作为电…

【开发技巧 | 第二篇】IDEA新增作者信息、方法参数返回值

文章目录 2.IDEA新增作者信息、方法参数返回值2.1类新增作者信息2.2方法新增参数返回信息2.3测试2.3.1新建类2.3.2新建方法 2.IDEA新增作者信息、方法参数返回值 2.1类新增作者信息 打开IDEA的Settings,Editor->Code Style->File and Code Templates->Inc…

使用 ORPO 微调 Llama 3

原文地址:https://towardsdatascience.com/fine-tune-llama-3-with-orpo-56cfab2f9ada 更便宜、更快的统一微调技术 2024 年 4 月 19 日 ORPO 是一种新的令人兴奋的微调技术,它将传统的监督微调和偏好校准阶段合并为一个过程。这减少了训练所需的计算…

思科防火墙查如何查看现有ipsec隧道信息

环境: 思科ASA5555 问题描述: 思科防火墙查如何看现有ipsec隧道信息 解决方案: 1.进入特权模式: enable 查看isakmp信息 show crypto isakmp sa2.查看ipsec信息 show crypto ipsec sa上述命令将显示当前的ISAKMP安全关联…

设计模式之组合实体模式

在编程的奇幻森林里,树木与枝叶错综复杂,如何让代码世界井然有序?组合实体模式(Composite Pattern)就像一位高明的园艺师,它以一种巧妙的方式,将个体与整体统一管理,让无论是单个对象…

【Conda】解决使用清华源创建虚拟环境不成功问题

文章目录 问题描述:清华源创建不成功解决步骤1 添加官方源步骤2 删除C:/user/你的用户名/的 .condarc 文件步骤3 再次创建 问题描述:清华源创建不成功 本地配置了清华源,但是在创建虚拟环境时不成功,报错如下。 图片若看不清&…

直流屏电源模块HK22010/T2充电模块HK11010/T2说明

直流屏整流模块HK22010/T2电源模块HK11010/T2充电机HK22005/T2,HK11020/T2,HK22020/T2以及各种电源型号介绍 产品名称:直流屏电源模块HK22005/T2充电机HK11020/T2整流模块HK11005/T2,HK22020/T2 技术参数 交流输入额定电压&…

AI大模型探索之路-训练篇11:大语言模型Transformer库-Model组件实践

系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…

一觉醒来 AI科技圈发生的大小事儿 05月03日

📳马斯克刚回美国,旋风裁掉了这个部门 特斯拉CEO马斯克裁撤超充团队,开除两名高管,转向AI领域,集中精力发展FSD;裁员举措引发合作伙伴担忧,特斯拉放缓充电站建设,影响整个行业&…

./build.sh:行1: g++: 未找到命令的错误问题在centos操作系统下面如何解决

目录 g: 未找到命令报错解释g: 未找到命令解决方法 centos操作系统,执行一个bash,bash命令很简单,就是用g编译一个C的程序。报告错误: ./build.sh:行1: g: 未找到命令 g: 未找到命令报错解释 这个错误表明在执行名为 build.sh 的…

一文了解复杂度

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、算法效率二、时间复杂度1.定义2.大O的渐进表示法3.一般常见复杂度4.实例 三、空间复杂度1.定义2.空间复杂度计算3.实例 总结 前言 计算复杂性理论&#xf…

LWIP+TCP客户端

一、TCP API函数 其中tcp_poll()函数的第三个参数表示隔几秒调用一次这个周期性函数 二、修改服务器的IP 三、TCP客户端编程思路 申请套接字绑定服务器IP和端口号等待客户端连接 进入连接回调函数在连接回调函数中 配置一些回调函数,如接收回调函数,周期…

FIFO Generate IP核使用——AXI接口FIFO简介

AXI接口FIFO是从Native接口FIFO派生而来的。AXI内存映射接口提供了三种样式:AXI4、AXI3和AXI4-Lite。除了Native接口FIFO支持的应用外,AXI FIFO还可以用于AXI系统总线和点对点高速应用。 AXI接口FIFO不支持Builtin FIFO和 Shift Register FIFO配置。 当…

UG NX二次开发(C#)-获取Part中对象创建时的序号(*)

文章目录 1、前言2、UG NX的对象序号讲解3、采用UG NX二次开发或者建模序号4、注意事项1、前言 在UG NX中,我们创建任意一个对象,都会在模型历史中添加一个创建对象的编号,即是对象序号,这个是递增的,当删除中间产生的对象时,其序号会重新按照建模顺序重新排布。今天一个…

34.基础乐理-简谱需要移调吗?

首先需要具备 首调 与 固定调的知识,才能理解,以两只老虎为例子,如下图: 首调:可以看到C大调、D大调、E大调三种方式的乐谱,记录的数字,记录的唱名,都是1231,唯一不同的…