java agent简介

  1. 主要就是两种,一种的方法是premain,一种是agentmain。这两种的区别是:

    1. premain是在jvm启动的时候类加载到虚拟机之前执行的
    2. agentmain是可以在jvm启动后类已经加载到jvm中了,才去转换类。这种方式会转换会有一些限制,比如不能增加或移除字段。
  2. 具体的做法,两者的实际做法是差不多的:

    1. premain

      定义个静态方法public static void premain(String args, Instrumentation inst),

      在生成jar包中MANIFEST.MF文件中需要有Premain-Class: xxx.xxx,xxx.xxx就是上面premain方法所在的类名

      在java 的启动参数中添加 -javaagent:/jar包路径[=agentArgs]

      这样定义了后jvm启动时,就会去加载javaagent中指定的jar包,查找MANIFEST.MF文件中Premain-Class属性的类,执行premain方法。

      参考asm文档简单修改了下打印方法执行时间的demo

      blogdemo/javabasedemo/agentdemo at main · wbo112/blogdemo (github.com)

    2. agentmain

      定义个静态方法public static void agentmain(String agentOps, Instrumentation instrumentation),

      在生成jar包中MANIFEST.MF文件中需要有Agent-Class: xxx.xxx (xxx.xxx就是上面agentmain方法所在的类名)
      Can-Retransform-Classes: true

      使用下面代码,将agent添加到指定java进程

               vm = VirtualMachine.attach(pid);try {vm.loadAgent("D:\\tmp\\my-java-agent-1.0-jar-with-dependencies.jar", null);} finally {vm.detach();}
      

      这个github找到一个很不错的案例。wujiuye/bytecode-book: 《Java虚拟机字节码从入门到实战》一书的配套代码 (github.com)

  3. 具体类的转换处理一般都是用asm之类修改字节码的开源组件。主要就是实现ClassFileTransformer接口,对入参的byte[]这个就是class类的字节数组了,对这个进行转换,返回新的class类的byte[]字节数组

  4. 看看arthas中的使用

    • 我们在启动arthas的时候加上--debug-attach参数,我们就能通过debug的方式看到attach到java进程的代码。默认调试端口是8888

      这个时候就会暂停住,等待我们去debug连接,整个的启动命令行用ps命令也能看到,我本地看到的是这样

      /root/software/jdk1.8.0_291/bin/java -Xbootclasspath/a:/root/software/jdk1.8.0_291/lib/tools.jar -agentlib:jdwp=transport=dt_socket,address=8888,server=y,suspend=y -Djava.awt.headless=true -jar /root/software/demo/arthas-bin/arthas-core.jar -pid 126336 -core /root/software/demo/arthas-bin/arthas-core.jar -agent /root/software/demo/arthas-bin/arthas-agent.jar
      

      本地idea 通过debug连上就可以了

      上面有个attachAgent方法,里面也调用上面说的 VirtualMachine.attach(pid); vm.loadAgent();virtualMachine.detach();方法

    • 上面可以看到最终attache到我们java程序的其实是arthas-agent.jar。

      我们看看它里面的关于agent的内容:

      从上面的图上也能看到arthas嵌入程序的入口其实都是通过com.taobao.arthas.agent334.AgentBootstrap来完成的。

java agent简介相关推荐

  1. java agent简介热部署SDK接入

    思考: 我们在平时使用arthas的类方法监控,类增强,到底是怎么在应用启动后还能对类进行修改的呢,他到底是基于什么场景下孕育出来的呢,今天我们就来聊一聊java-agent,当了解完了agent机制 ...

  2. Java Agent简介及使用Byte Buddy和AspectJ LTW监控方法执行耗时

    1.什么是Java Agent Java Agent提供了一种在加载字节码时,对字节码进行修改的方法.一共有两种方式执行:一种是在main方法执行之前,通过premain来实现:另一种是在程序运行中, ...

  3. 写那么多年Java,还不知道啥是Java agent 的必须看一下!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者信息:张帅,花名洵澈,国际化中台事业部高级开发工程师,负责物流 ...

  4. 我的天,你工作5年了,连Java agent都不知道...

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 # 引言 在本篇文章中,我会通过几个简单的程序来说明 agent ...

  5. Java agent初探

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"获取公众号专属群聊入口 来源:阿里巴巴中间件 在本篇文章中,我会通过几个简单的程 ...

  6. 基于Java Agent实现APM

    一.APM概述 APM系统(Application Performance Management,即应用性能管理),用于对应用系统做实时监控,目的是实现对应用性能管理和故障定位. 1.1.为什么需要A ...

  7. Java agent 探针技术(1)-JVM 启动时 premain 进行类加载期增强

    文章目录 1. 简介 2. 使用 Java agent 的步骤 3. 使用示例 3.1 创建实现 ClassFileTransformer 接口的类 3.2 创建使用 ClassFileTransfo ...

  8. Java Agent介绍及其使用

    一.简介 Java Agent技术,也被称为Java代理.Java探针,它允许程序员利⽤其构建⼀个独⽴于应⽤程序的代理程序. Java Agent 本质上就是一个 jar 包,对于普通的Jar包,通过 ...

  9. Java Agent 调试,Java agent debug

    Java Agent 调试,agent debug 一.简介 Java agent 是在另外一个 Java 应用("目标"应用)启动之前要执行的 Java 程序,这样 agent ...

最新文章

  1. RMI中部署时要注意的地方
  2. 如何踩中下一个技术节拍
  3. docker 安装hadoop
  4. 数据库索引设计与优化pdf
  5. 3dmax软件怎么贴图
  6. 十字路口旁边有一个路口_观察路口观察员
  7. 第三十七课.宽度学习
  8. 校园一卡通管理信息系统的设计与实现(asp.net)
  9. 通过搭建FTP站点实现上传与下载
  10. Android系统音乐界面UI设计,40款音乐APP界面UI设计欣赏
  11. 哈耶克《感觉的秩序》导读
  12. pycharm2019+破解补丁
  13. edi mysql_EDI:_数据库基础(mysql)答案_学小易找答案
  14. tableau新新手指南(基础功能介绍)
  15. transition和transition的区别
  16. 利用iframe跨域请求
  17. 异丁酸酐(CAS 97-72-3)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. Vue全家桶构建项目
  19. 前端三剑客:JavaScript
  20. 毕业答辩的流程是什么

热门文章

  1. puppeteer做页面监控
  2. 第一百零六期:长相不讨AI喜欢面试就会挂?全球百万求职者经历AI“看脸”面试
  3. 2022.12 青少年机器人技术等级考试理论综合试卷(一级)
  4. 团队管理课程培训心得(四)
  5. 网站漏洞检测之Discuz论坛 3.4版本
  6. IP RAN和PTN的区别——TFN TT60 综合网络测试仪
  7. 利用最小堆完成有理数的类定义以及有理数逻辑运算
  8. 前端插件,你不容错过
  9. 上海市计算机一级考试试题模拟,48-上海市高校计算机等级考试一级 模拟试题...
  10. LeakCanary