Java Agent - 应用程序代理-笔记

Java Agent - 应用程序代理-笔记

概述说明

Java Agent 又叫做 Java 探针,该功能是 Java 虚拟机提供的一整套后门,通过这套后门可以对虚拟机方方面面进行监控与分析,甚至干预虚拟机的运行。

是在 JDK1.5 引入的一种可以动态修改 Java 字节码的技术。Java 类编译之后形成字节码被 JVM 执行,在 JVM 在执行这些字节码之前获取这些字节码信息,并且通过字节码转换器对这些字节码进行修改,来完成一些额外的功能。

这里,可以想到这个技术的应用场景就有:JVM分析,应用监控,链路追踪,日志收集,动态篡改,源码加密等了


基础使用原理

提供了一个名为java.lang.instrument的工具包, 包是基于JVMTI机制实现的。

JVMTI(Java Virtual Machine Tool Interface)是一套由 Java 虚拟机提供的了一套代理程序机制,可以支持第三方工具程序以代理的方式连接和访问 JVM。JVMTI 的功能非常丰富,包括虚拟机中线程、内存/堆/栈,类/方法/变量,事件/定时器处理等等。使用 JVMTI 一个基本的方式就是设置回调函数,在某些事件发生的时候触发并作出相应的动作,这些事件包括虚拟机初始化、开始运行、结束,类的加载,方法出入,线程始末等等。

方式一:静态参数

通过 -javaagent 参数可以指定一个特定的 jar 包来启动 Instrumentation 代理程序。

JVM启动时 会先执行 premain 方法,大部分类加载都会通过该方法,注意:是大部分,不是所有。遗漏的主要是系统类,因为很多系统类先于 agent 执行,而用户类的加载肯定是会被拦截的。也就是说,这个方法是在 main 方法启动前拦截大部分类的加载活动,既然可以拦截类的加载,就可以结合第三方的字节码编译工具,比如ASM,javassist,cglib等等来改写实现类。

方式二:动态Instrument

Java SE 6 当中提供的 Attach 机制。Attach API 是 Sun 公司提供的一套扩展 API,用来向目标 JVM “附着”(Attach)代理工具程序的。有了它,开发者可以方便的监控一个 JVM,运行一个外加的代理程序。

这样,就一个单独一个程序,去接入已运行中的JVM,对内部各种信息进行操作了。


以上这些,具体技术,反正不是我这水平可以去写的。

还是看看使用这个技术的开源项目吧。╮(╯_╰)╭


应用场景【开源项目】

  • 应用性能监控(APM) :

    • APM通过汇聚业务系统各处理环节的实时数据,分析业务系统各事务处理的交易路径和处理时间,实现对应用的全链路性能监测。开源的Skywalking、Pinpoint,、ZipKin、 Hawkular, 商业的 AppDynamics、OneAPM、Google Dapper等都是个中好手。

  • classPath动态增补:无法理解在哪里会用到,搞破坏吗?

  • class 文件加密:使用 JVMTI 我们可以将解密的代码封装成 .dll, 或 .so 文件。这些文件想要反编译就很麻烦了,另外还能加壳。解密代码不能被破解,从而也就保护了我们想要加密的 class 文件。

开源的项目【主要还是APM的】
  • **阿里巴巴开源的 Arthas:**深受开发者喜爱的Java诊断工具。在线排查问题,无需重启;动态跟踪 Java 代码;实时监控 JVM 状态。
  • 阿里巴巴开源的JVM SandBox:实时、无侵入、动态可插拔的字节码增强框架,可用于线上故障定位、系统流控、动态日志等场景
  • 国内开源的 Skywalking : 针对服务的调用链路、JVM 基础监控信息进行采集。
  • Uber开源的jvm-profiler:通过 Java Agent 采集 JVM CPU、Memory、IO等指标并发送给 Kafka、Console 以及可以自定义的发送器。
  • sun开源的BTrace:一款java 动态、安全追踪工具,可以不停机的情况下监控线上情况,并且做到最少的侵入,占用最少的系统资源。
链路追踪
  • Zipkin是Twitter开源的调用链路分析工具,目前基于Spingcloud sleuth得到了广泛的应用,特点是轻量,部署简单。
  • Pinpoint,一个韩国团队开源的产品,运用了字节码增强技术,只需要在启动时添加启动参数即可,对代码无侵入,目前支持Java和PHP语言,底层采用HBase来存储数据,探针收集的数据粒度非常细,但性能损耗大,因其出现的时间较长,完成度也很高,应用的公司较多**【无侵入】**
  • Skywalking是本土开源的基于字节码注入的调用链路分析以及应用监控分析工具,特点是支持多种插件,UI功能较强,接入端无代码侵入。【无侵入,这个还是很好的】
  • CAT是由国内美团点评开源的,基于Java语言开发,目前提供Java、C/C++、Node.js、Python、Go等语言的客户端,监控数据会全量统计,国内很多公司在用,例如美团点评、携程、拼多多等,CAT跟下边要介绍的Zipkin都需要在应用程序中埋点,对代码侵入性强。

参考:
Java Agent介绍:https://blog.csdn.net/a724888/article/details/127004488
Skywalking介绍 :https://www.jianshu.com/p/ffa7ddcda4ab
SkyWalking 文档中文版:https://skyapm.github.io/document-cn-translation-of-skywalking/
SkyWalking 教程:https://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android.support.v7.app.AlertDialog

ndroid.support.v7.app.AlertDialog 参考 android.support.v4.app.ActivityCompat;-CSDN博客

gitlab安装和使用

gitlab安装和使用 1.下载必要的依赖 sudo yum install curl openssh-server openssh-clients postfix cronie #需要执行sudo service postfix start #配置邮箱的sudo chkconfig postfix on #配置邮箱的#这句是用来做防火墙的,避免用户通过ssh方式和http来访问。su…

修改Android Studio默认的gradle目录

今天看了一下,gradle在C盘占用了40多G。我C盘是做GHOST的,放在这里不方便。所以就要修改。 新建目录名(似乎无必要) ANDROID_SDK_HOMEG:\SOFTWARES\android-sdk GRADLE_USER_HOMEG:\SOFTWARES\.gradle 修改目录 File->Setti…

C# 异步日志记录类,方便下次使用,不用重复造轮子

先定义接口类: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 异常 {internal interface ILog{Task WriteErrorLog(string message);Task WriteInfoLog(string message);Task W…

Git 安全警告修复手册:解决 `fatal: detected dubious ownership in repository at ` 问题 ️

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

2.HTML中常用浏览器

2.常用浏览器 2.1 什么是浏览器 浏览器是网页显示,运行的平台。常用的浏览器有IE,火狐,谷歌,Safari和Opera等 平时成为五大浏览器 2.2 浏览器内核 浏览器内核(渲染引擎):负责读取网页内容&…

Java算法(五):手写数组逆置API方法,实现数组逆置。 while实现 for循环实现

Java算法(五) while 循环实现 需求: 已知一个数组,arr {11, 22, 33, 44, 55};使用程序实现把数组中的元素交换位置。 交换后的数组为 arr {55, 44, 33, 22, 11}; 并在控制台输出交换后的数组元素。 代码示例 package com.…

如何上传自己的npm包

文章目录 一、创建项目1.1 第一步注册1.2 第二步初始化1.3 第三步登录1.4 更改镜像1.5 上传1.6 更新上传后的npm包 二、编写代码2.1 新建一个文件夹2.2 初始化2.3 package.json配置2.4 安装依赖模块2.5 创建index.js文件2.6 测试2.7 上传 npm是什么? npm是JavaScrip…

提取当前文件夹下多文件夹中的数据

提取当前文件夹下多文件夹中的数据 1.实现步骤 现在D:\临时\图库 这个文件夹下有多个文件夹,现在需要将多个文件夹中的文件全部移动到D:\临时\图库下; $sourcePath "D:\临时\图库" $targetPath "D:\临时\图库"Get-ChildItem -Path $sourcePath -File …

【Proteus仿真】【Arduino单片机】数码管显示

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用TM1637、共阳数码管等。 主要功能: 系统运行后,数码管显示数字、字符。 二、软件设计 /* 作者:嗨小易&am…

安卓常见设计模式------装饰器模式(Kotlin版)

1. W1 是什么,什么是装饰器模式? 思想:动态地给对象添加额外的功能,通过将对象包装在一个装饰器类中,使装饰器类在不改变原始对象结构的情况下,扩展其功能。 2. W2 为什么,为什么需要使用装饰…

Spring Cloud Config、Apollo、Nacos和Archaius对比

一、适应场景 Spring Cloud Config、Apollo、Nacos、Archaius这四个配置中心在功能和使用场景上有所差异。 1.Spring Cloud Config Spring Cloud Config是Spring Cloud官方提供的分布式系统的外部配置中心。它提供了服务器和客户端支持,可以集中管理不同环境、不同集…

平面和射线交点

设平面 A x B y C z D 0 ( A 2 B 2 C 2 ≠ 0 ) AxByCz D0\left(A^2B^2C^2\neq 0\right) AxByCzD0(A2B2C20), 点 P ( P x , P y , P z ) P(P_x, P_y, P_z) P(Px​,Py​,Pz​) (1)求点 P P P到平面距离 (2)过点 P P P作直线,方向为 ( D x , D y , D z ) \lef…

AI时代如何提升自己晋升力

要在AI时代提升职场晋升力,采取以下详细策略: 终身学习的实践: 专业课程: 定期参加在线课程或研讨会,如Coursera、edX等,学习最新的AI技术和行业动态。行业资讯: 订阅相关的行业杂志、博客&…

基于SSM的学院就业信息网设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

奇异矩阵、非奇异矩阵

对于一个方阵A: 如果A的行列式等于0,称矩阵A为奇异矩阵如果A的行列式不等于0,称A 非奇异矩阵 也就是说,对于方阵A,如果它是满秩的,即它的秩等于矩阵的阶数,就是非奇异矩阵;如果秩小…

​怎么测试websocket接口

在部分业务中,我们需要使用长连接,我们可以使用http长连接或者websocket,开发结束后难免会遇到测试问题,这里推荐2个,一个是postman,一个是网站 postman 测试网站 测这边推荐测试网站,支持ws/w…

【123. 买卖股票的最佳时机 III】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:const int Init-0x3f3f3f3f;int maxProfit(vector<int>& prices) {int nprices.size();vector<vector<int>> f(n,vector<int>(3,Ini…

electron 主进程 和 渲染进程通信 ipcRenderer 和 mainWindow.webContents

electron 开发时最麻烦就是electron版本和node版本的选择和正确安装 electron 用npm安装时太慢容易报错&#xff0c;建议用cnpm i 进行安装 注意最新版渲染进程使用node nodeIntegration: true, // 渲染进程可用node contextIsolation: false, // 这个值影响nodeIntegration是…

送水服务预约小程序内容该如何做

无论小区还是办公楼等场景&#xff0c;送水服务往往有较高需求&#xff0c;同时该服务属于长期稳定性的&#xff0c;因此对品牌来说&#xff0c;如何打造品牌获取更多用户及转化非常重要&#xff0c;然而在实际订水过程中&#xff0c;又会面临着一些难题&#xff1a; 1、品牌传…