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方法中去, 去執行我們自己的邏輯;

實踐開發

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