Java Agent的初步认识和开发

认识

Java Agent即Java探针技术, 通过Java Interface的方式对JVMTI(JVM Tool Interface) 底层一些功能的调用进而实现一些自己想要的应用功能, 比如应用程序性能分析, 应用调用监控拦截等功能

JVMTI介绍

JVMTI是JVM向外暴露的一批接口, 提供了诸如获取JVM中线程, 内存, 堆栈, 方法, 定时器等功能, 通过这些接口我们可以完全的把控应用的运行时信息, 运行时的拦截跟踪等; 同时它也是JPDA架构中处于最地下的一层服务接口,在其之上才构建出Java应用的Debug架构体系;

instrument包介绍

jdk的java.lang.instrument包下面定义了JVM中Class的存在形式及修改转化Class定义文件的接口. 这些接口由JVM开发商(sun)实现. 我们就可以使用这些接口进而对Class进行修改;

运行原理

定义Java Agent的jar

一个Java Agent就是一个普通的jar文件, 然后在jar的MANIFEST.MF文件中声明jar的执行入口class路径, 比如

Premain-Class: x.y.z.MainClass

Agent jar的入口class

一个普通的Java-class, 然后需要有一个限定名称和入参的静态方法

public static void premain(String agentArgs, Instrumentation instrumentation) throws PluginException, IOException {
// 自定义切入逻辑代码
}

java命令指定Agent参数

java -javaagent:{agent-jar-path} -D{agent.param.key}={agent.param.value} -jar {app-jar-path}

启动步骤

JVM启动时, 在加载应用jar之前, 在加在Instrumentation的实现类时, 就会调用到我们自己写的Agent的Main方法中去, 去执行我们自己的逻辑;

实践开发

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章