首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏杨不易呀

    javaAgent入门

    Jdk1.5 以后引入了 javaAgent 技术,javaAgent 是运行在方法之前的拦截器,相当于是对字节码进行的一个 AOP 操作,利用 javaAgent 和 ASM 字节码技术,在 JVM Javaagent 是 java 命令的一个参数。参数 javaagent 可以用于指定一个 jar 包。 指定的那个类必须实现 premain() 方法 premain 方法 从字面上理解,就是运行在 main 函数之前的的类 当 Java 虚拟机启动时,在执行 main 函数之前,JVM 会先运行 -javaagent 所指定 jar 包内 Premain-Class 这个类的 premain 方法 使用 JavaAgent 创建一个 Premain-Class 指定的类,类中包含 premain 方法,方法逻辑由用户自己确定 参数,拷贝刚刚打包好的 jar 包的绝对路径: 配置参数: 配置的 JVM 的参数,新版本的 IDEA 需要开启这个配置如下图: -javaagent:D:\Develop\IDEAPro\JavaAgent

    2.4K61编辑于 2023-11-20
  • 来自专栏CodeGuide | 程序员编码指南

    基于JavaAgent的全链路监控一《嗨!JavaAgent

    章节列表 基于JavaAgent的全链路监控一《嗨! JavaAgent》 基于JavaAgent的全链路监控二《通过字节码增加监控执行耗时》 基于JavaAgent的全链路监控三《ByteBuddy操作监控方法字节码》 基于JavaAgent的全链路监控四 《JVM内存与GC信息》 基于JavaAgent的全链路监控五《ThreadLocal链路追踪》 基于JavaAgent的全链路监控六《开发应用级监控》 案例简述 JavaAgent是在JDK5 JavaAgent " + agentArgs); } //如果代理类没有实现上面的方法,那么 JVM 将尝试调用该方法 public static void premain( JavaAgent Process finished with exit code 0

    2.1K20发布于 2020-07-14
  • 来自专栏小工匠聊架构

    APM - Hello Javaagent

    什么是javaagent 简单来说, javaagent 是在class 被装在到ClassLoader之前对其拦截,插入自定义的监听字节码,可实现零侵入的监控,是APM的核心技术 Java1.5之后引入的特性 通过premain方法,可实现一个JavaAgentjavaagent 应用场景:监控、代码覆盖率分析 、JProfiler、应用破解等等等 ---- javaagent的jar包 和 普通jar包的区别 javaagent 其实就是一个jar 包,通过 -javaagent:xxx.jar 引入监控目标应用。 ---- 【引入agent jar 为当前应用启动前插入premain逻辑】 jvm参数指定 -javaagent:E:\IdeaProjects\javaagent\target\javaagent-

    1K30发布于 2021-08-17
  • 来自专栏一个会写诗的程序员的博客

    【精通 JVM 原理】浅析 JavaAgent & Instrumentation 机制

    浅析 JavaAgent & Instrumentation 机制 前言 本文主要内容 1、JVM的字节码指令,方法调用机制 2、Java类加载器 3、JavaAgent 4、Java Instrumentation JavaAgent Java Instrumentation 参考资料 https://indrabasak.github.io/java-runtime-memory/ https://blog.csdn.net

    1.6K30发布于 2021-04-04
  • 来自专栏JavaEdge

    -jar和 javaagent命令冲突吗?

    当使用 -jar 命令运行 Java 应用程序时,Java 虚拟机 (JVM) 会忽略任何设置的 -javaagent 命令。 这是因为 -jar 命令会覆盖其他命令行选项,包括 -javaagent。 这是因为 -jar 命令是用于运行打包为 JAR 文件的 Java 应用程序的快捷方式。 如果你想同时使用 -jar 和 -javaagent 命令,可以考虑使用 java 命令来运行应用程序。 以下是一个示例命令: java -javaagent:agent.jar -jar app.jar 在这个示例中,agent.jar 是你想要使用的代理程序的 JAR 文件,app.jar 是你的应用程序的

    54920编辑于 2023-07-27
  • 来自专栏CodeGuide | 程序员编码指南

    基于javaagent监控方法执行耗时

    背景描述 javaagent是在JDK5之后提供的新特性,也可以叫java代理。 配置信息(路径相关修改为自己的) 1、java调试时配置 2.1、配置位置:Run/Debug Configurations ->VM options 2.2、配置内容(编译后的jar放到根目录下):-javaagent :E:\itstack-demo-javaagent-1.0-SNAPSHOT.jar=agentargs 代码示例 itstack-demo-javaagent ├── pom.xml └── src </artifactId> <version>1.0-SNAPSHOT</version> <name>test-javaagent</name> <description>test-javaagent :E:\itstack-demo-javaagent-1.0-SNAPSHOT.jar=agentargs */ public class AgentTest { private static

    2.1K11发布于 2020-07-14
  • 来自专栏一个安全研究员

    实现一个javaagent需要几步?

    在介绍javaagent之前,我想有必要向大家介绍一下JVMTI,因为javaagent是基于这个技术实现的 JVMTI JVMTI(JVM Tool Interface)是 Java 虚拟机所提供的 Agent程序其实就是一个C/C++语言编写的动态链接库 注:这里提到的agent程序和javaagent不是同一概念 我们通过JVMTI开发好agent程序后,把程序编译成动态链接库,之后可以在jvm 下面,我们来看一下怎么开发一个基于Instrumention的agent吧 开发一个Javaagent 开发一个javaagent需要几步呢? :agent.jar demo.jar来使用我们的javaagent了。 然后执行Person.main方法,输出如下: 至此,我们已经掌握了简单的javaagent的实现方法,不过上面这种javaagent需要在jvm启动前设置-javaagent参数,但是很多时候,

    1K30发布于 2021-11-11
  • 来自专栏kl的专栏

    skywalking源码分析之javaAgent工具ByteBuddy的应用

    前言碎语 关于skywalking请看我上一篇博文,其使用javaAgent技术,使得应用接入监控0耦合。今天在分析skywaking过程中,对javaAgent技术有了更深入的了解。 skywalking使用的javaAgent工具ByteBuddy是一个比ASM更上层的针对java字节码操作的封装,基于ByteBuddy,我们可以快速方便的对java字节码进行增强处理,更高效的开发 javaAgent应用。 接下来,我们需要启动应用程序,并且在命令行中通过javaagent参数来引用jar文件的位置: java -javaagent:myAgent.jar -jar myProgram.jar 通过重复使用 javaagent命令,能够添加多个agent。

    3.5K80发布于 2018-04-13
  • 来自专栏个人学习摘要

    java运行时创建或修改类-JavaAgent

    JDK 1.5 支持静态 Instrumentation,在 JVM 启动的时候通过 -javaagent:xxxx.jar的方式加载一个agent,该jar包含MANIFEST.MF 文件同时在里面指定代理类 JDK 1.6 开始支持更加强大的动态 Instrument,在JVM 启动后通过 Attach API 远程加载一个agent,和javaagent一样该jar需要包含MANIFEST.MF同时在里面制定代理类 运行程序 java -javaagent:demoAgent.jar Demo java attach方式修改类 // 相比agent方式有三个不同 // 1. 启动命令中不在需要javaagent参数 // 2. agent类中premain方法需要切换成agentmian // 3. 委托Bytebuddy生成 public class DemoAgent { // javaagent 方式执行 public static void main(String[] args

    1.2K50编辑于 2023-09-21
  • 来自专栏只为你下

    JVM源码分析之javaagent原理完全解读

    当我们一个系统既需要mysql驱动,也需要oracle驱动的时候,在并发加载初始化这些驱动类的过程中产生死锁的可能性非常大,下面是一个模拟的例子,对于Thread2的实现其实是jdk里java.sql.DriverService的逻辑,也是我们第一次调用java.sql.DriverManager.registerDriver注册一个驱动实例要走的逻辑(jdk1.6下),不过这篇文章是使用我们生产环境的一个系统的线程dump和内存dump为基础进行分析展开的。

    1.7K40发布于 2020-03-24
  • 来自专栏landv

    提取Jar2Exe源代码,JavaAgent监控法

    这里学习一种方法(但是方法有一定缺点,我们后面讲把) 首先构建一个Java代理(JavaAgent),目的是让程序员可以更加灵活的监控Java虚拟机的运行。 然后激活该JavaAgent,接着运行Jar2Exe编译的Exe程序。尽可能多的测试程序中的功能,点击不同的按钮,让更多的类文件被加载到内存中,这样它们就会被dump出来。 下面讲步骤 1.准备工作 下载地址:https://github.com/HaoQinLandv/e2j 然后放到同一个目录下 打开命令行并进入要破解的程序所在目录,在命令行输入以下命令设置JavaAgent 的加载 set JAVA_TOOL_OPTIONS=-javaagent:e2j-agent.jar 该命令是让java程序在加载一个类时会自动调用JavaAgent 2.操作 命令行运行你需要提取源代码的软件即可

    2.1K40发布于 2019-03-05
  • 来自专栏后台技术汇

    JavaAgent技术应用和原理:JVM持久化监控

    背景JavaAgent技术是一种在Java虚拟机(JVM)上运行的代理程序,它允许开发者在运行时修改Java字节码,从而实现对Java应用程序的动态增强和监控。 JavaAgent技术基于JVM工具接口(JVMTI),通过字节码插桩实现其功能。JavaAgent技术原理JavaAgent技术通过两种方式启动:加载时启动和运行时启动。 加载时启动的JavaAgent在类加载时进行修改,具有完全的修改权限,但修改后需要重启应用才能生效。运行时启动的JavaAgent在应用运行过程中加载,可以随时对应用进行修改,但修改权限有限。 JavaAgent技术应用场景JVM监控和性能分析:通过JavaAgent技术,可以在不修改源代码的情况下,对Java应用程序进行CPU、内存、线程等性能指标的监控和分析代码热替换:在运行时动态替换类定义

    36500编辑于 2024-11-25
  • 来自专栏后台技术汇

    JavaAgent技术应用和原理:JVM持久化监控

    preMain:主程序执行前执行agentMain:主程序运行后执行添加描述一般JavaAgent技术通过两种方式启动:加载时启动和运行时启动。 加载时启动的JavaAgent在类加载时进行修改,具有完全的修改权限,但修改后需要重启应用才能生效。 通过在JVM启动参数中添加-javaagent:path/to/agent.jar来加载Java Agent。 实现JavaAgent的premain方法:在JVM启动时调用,用于在应用程序启动前进行字节码增强。运行时启动的JavaAgent在应用运行过程中加载,可以随时对应用进行修改,但修改权限有限。 实现JavaAgent的agentmain方法:在JVM运行时调用,用于在应用程序运行时进行字节码增强。

    40500编辑于 2024-12-23
  • 来自专栏CodeGuide | 程序员编码指南

    基于JavaAgent的全链路监控四《JVM内存与GC信息》

    Community Edition 2、jdk1.8.0_45 64位 配置信息(路径相关修改为自己的) 1、配置位置:Run/Debug Configurations -> VM options 2、配置内容:-javaagent itstack.org * 论坛:http://bugstack.cn * 公众号:bugstack虫洞栈 {获取学习源码} * create by fuzhengwei on 2019 * -javaagent JavaAgent"); list.add("嗨!JavaAgent"); list.add("嗨! JavaAgent"); } } } 测试结果 this is my agent:testargs init: 192MB max: 2708MB used: 5MB

    1.4K10发布于 2020-07-14
  • 来自专栏Seebug漏洞平台

    认识 JavaAgent --获取目标进程已加载的所有类

    最近刚好看到了JavaAgent,初步学习了下,能进行拦截,主要通过Instrument Agent来进行字节码增强,可以进行字节码插桩,bTrace,Arthas 等操作,结合ASM,javassist Java RASP也是基于JavaAgent实现的。趁热记录下JavaAgent基础概念,以及简单使用JavaAgent实现一个获取目标进程已加载的类的测试。 •premain需要通过命令行使用外部代理jar包,即-javaagent:代理jar包路径;agentmain则可以通过attach机制直接附着到目标VM中加载代理,也就是使用agentmain方式下 小结 •文中只是描述了JavaAgent相关的一些基础的概念,目的只是知道有这个东西,然后验证下之前遇到的一个问题。 7.https://github.com/longofo/learn-javaagent

    2.6K10发布于 2019-12-16
  • 来自专栏CodeGuide | 程序员编码指南

    基于JavaAgent的全链路监控六《开发应用级监控》

    Community Edition 2、jdk1.8.0_45 64位 配置信息(路径相关修改为自己的) 1、配置位置:Run/Debug Configurations -> VM options 2、配置内容:-javaagent public static void premain(String agentArgs, Instrumentation inst) { System.out.println("基于javaagent org.itstack.demo.agent.MyAgent Can-Redefine-Classes: true ApiTest.java ** * 链路追踪 * VM options: * -javaagent e.printStackTrace(); } System.out.println("测试结果:hi3 " + name); } } 测试结果 基于javaagent

    1.3K20发布于 2020-07-14
  • 来自专栏CodeGuide | 程序员编码指南

    基于JavaAgent的全链路监控五《ThreadLocal链路追踪》

    Community Edition 2、jdk1.8.0_45 64位 配置信息(路径相关修改为自己的) 1、配置位置:Run/Debug Configurations -> VM options 2、配置内容:-javaagent Advice.Origin("#m") String methodName) { TrackManager.getExitSpan(); } } MyAgent.java /** * javaagent public static void premain(String agentArgs, Instrumentation inst) { System.out.println("基于javaagent :http://bugstack.cn * 公众号:bugstack虫洞栈 {获取学习源码} * create by fuzhengwei on 2019 * VM options: * -javaagent http_lt3(); } public void http_lt3() { System.out.println("测试结果:hi3"); } } 测试结果 基于javaagent

    2.7K20发布于 2020-07-14
  • 来自专栏架构狂人

    字节码调试的入口 —— JVM 的寄生插件 javaagent 那些事

    JDK 1.5 支持静态 Instrumentation,基本的思路是在 JVM 启动的时候添加一个代理(javaagent),每个代理是一个 jar 包,其 MANIFEST.MF 文件里指定了代理类 Javaagent 介绍 Javaagent 是一个特殊的 jar 包,它并不能单独启动的,而必须依附于一个 JVM 进程,可以看作是 JVM 的一个寄生插件,使用 Instrumentation 的 Agent 的两种使用方式 它有两种使用方式: 在 JVM 启动的时候加载,通过 javaagent 启动参数 java -javaagent:myagent.jar MyMain,这种方式在程序 main 从 JDK6 开始引入了动态 Attach Agent 的方案,除了在命令行中指定 javaagent,现在可以通过 Attach API 远程加载。 这个过程如下图所示: 小结 本文讲解了 javaagent,一起来回顾一下要点: 第一,javaagent 是一个使用 instrumentation 的 API 用来改写类文件的 jar 包,可以看作是

    1.3K20编辑于 2023-08-16
  • 来自专栏CodeGuide | 程序员编码指南

    基于JavaAgent的全链路监控三《ByteBuddy操作监控方法字节码》

    Community Edition 2、jdk1.8.0_45 64位 配置信息(路径相关修改为自己的) 1、配置位置:Run/Debug Configurations -> VM options 2、配置内容:-javaagent + " 方法耗时:" + (System.currentTimeMillis() - start) + "ms"); } } } MyAgent.java /** * javaagent http://bugstack.cn * 公众号:bugstack虫洞栈 {获取学习源码} * create by fuzhengwei on 2019 * * VM options: * -javaagent

    2.4K30发布于 2020-07-14
  • 来自专栏小工匠聊架构

    APM - 使用JavaAgent+Javassit 插桩C3P0

    ---- 配置验证 在启动的JVM参数中配置如下信息 -javaagent:D:\IdeaProjects\artisan-apm\apm-agent\target\apm-agent-1.0-SNAPSHOT.jar

    57110发布于 2021-08-17
领券