4.8 JavaAgent案例演示

一、启动方式

  1. 静态方式:

    1. 启动时通过javaagent附加命令挂挂载

    2. 入口方法:premain()

    3. 字节码操作限制:

      1. 符合字节码规范

      2. 对字节码做任意修改

    4. 适应场景:需要对字节码进行大量修改(APM)

    5. SkyWalking目前只支持这种方式

  2. 动态方式:

    1. JVM运行时使用Attach API挂在Agent

    2. 入口方法:agentmain()

    3. 字节码操作限制:

      1. 不能增加父类

      2. 不能增加接口

      3. 不能增减字段

      4. ...

    4. 适应场景:系统诊断(阿里Arthsa)

  3. 字节码编辑:

    1. byte-buddy

    2. ASM

    3. Javaassist

二、Javaagent简单案例

  1. 通过byte-buddy实现

  2. 项目依赖:

    2023-05-26 19-48-41
  3. 入口方法:

    2023-05-26 19-49-42
  4. 指定拦截方法

    2023-05-26 19-50-43
  5. 打包后,通过附加jvm启动脚本执行

Last updated