Java Agent探针技术

1、基本概念

Java Agent 是 jdk1.5 引入的特征,此特征为用户提供了在 jvm 将字节码文件读入内存后,jvm 使用对应的字节流在 java 堆中生成 Class 对象之前,用户可以对字节码进行修改的能力,从而 jvm 使用修改后的字节码创建 Class 对象。

目前只支持冷启动,热部署方式仍需官方持续改进。

流程图:
流程图

2、应用场景

Pinpoint分布式链路
SkyWalking分布式链路

3、实现步骤
  • 定义一个 resources/META-INF/MANIFEST.MF 文件,在其中添加 premain-class 配置项。
  • 创建 premain-class 配置项指定的类,并在其中实现 premain() 方法,方法签名如下:
public static void premain(String agentArgs, Instrumentation inst){
   ... 
}
  • 将 MANIFEST.MF 文件和 premain-class 指定的类一起打包成一个 jar 包。
  • 使用 -javaagent 指定该 jar 包的路径即可执行其中的 premain() 方法。
4、小案例

1)创建一个代理的jar
github: https://github.com/fomeiherz/agent-example
jar打包:mvn clean package
打包完成后,会在 {base}/target 下生成一个agent.jar ,一会启动会用到。

2)创建测试类
本地任意目录创建文件:App.java

public class App {
    public static void main(String[] args) {
        new App().test();
    }
    private void test() {
        System.out.println("hello agent.");
    }
}

把第1步打包的agent.jar拷贝到App.java文件目录下,然后编译启动。

编译:javac App.java
启动:java -javaagent:agent.jar App

【参考资料】
Java探针-Java Agent技术-阿里面试题

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值