javaagent实现机制与使用

javaagent实现机制与使用

一、javaagent实现机制与使用

在这里插入图片描述
这里的采集过程即为埋点,埋点的方式有:

  1. 硬编码埋点捕捉
  2. AOP埋点捕捉
  3. 公共组件埋点捕捉
  4. 字节码插桩捕捉
    前面三种方试虽然简单但对系统造成了侵入,系统规模过大时并不可取,所以我们重点研究第四种方式。
    字节码插桩
    我们知道JVM是不能直接执行.java 代码 也不能直接执行.class文件,它只能执行.class 文件中存储的指令码。这就是为什么class 需要通过classLoader 装载以后才能运行。基于此机制可否在ClassLoader装载之前拦截修改class当中的内容(jvm 指令码)从而让程序中包含我们的埋点逻辑呢?答案是肯定的,但需要用到两个技术 javaagent与javassist 。前者用于拦截ClassLoad装载,后者用于操作修改class 文件。,
    2、javaagent介绍
    Java Agent
    javaagent 是java1.5之后引入的特性,其主要作用是在class 被加载之前对其拦截,已插入我们的监听字节码
    在这里插入图片描述
    javaagent jar包
    javaagent 最后展现形式是一个Jar包,有以下特性
  5. 必须 META-INF/MANIFEST.MF中指定Premain-Class 设定启agent启动类。
  6. 在启类需写明启动方法 public static void main(String arg,)
  7. 不可直接运行,只能通过 jvm 参数-javaagent:xxx.jar 附着于其它jvm 进程运行。

2、javaagent使用演示
pom加入
在这里插入图片描述
javaagent META-INF/MANIFEST.MF 参数说明:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发布了32 篇原创文章 · 获赞 16 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_32497361/article/details/88729510