javaagent使用介绍

2021-12-25 23:33:00
admin
原创 1364
摘要:javaagent使用介绍

一、javaagent使用介绍

1、javaagent通过premain或者angentmain方法注入java应用,从而影响应用执行,用于热部署或者监控;

2、java应用可以加载多个代理,premain代理必须位于命令行参数的主类或者-jar参数前面;

3、premain(String,Instrumentation)优先级高于premain(String),两个方法同时存在时执行前者;

4、agentmain(String,Instrumentation)优先级高agentmain(String),两个方法同时存在时执行前者;

5、代理jar包的MANIFEST文件必须包含Premain-Class或者Agent-Class;


程序启动前注入:

程序启动前代理类:AgentStatic.java

程序启动前代理清单:agent-static.mf

测试程序:AgentTest.java


打包以及执行:

jar cvfm myagent1.jar agent-static.mf -C target\classes javaagent\AgentStatic.class

java -javaagent:myagent1.jar=myagent -classpath target\classes javaagent.AgentTest


执行输出:

AgentStatic::premain(String,Instrumentation)
myagent
main


程序启动后注入:

程序启动后代理类:AgentDynamic.java

程序启动后代理清单:agent-dynamic.mf

注入程序AttachApp.java


打包以及执行:

jar cvfm myagent2.jar agent-dynamic.mf -C target\classes javaagent\AgentDynamic.class

java -classpath "target\classes;%JAVA_HOME%\lib\tools.jar" javaagent.AttachApp pid myagent2.jar myagent


执行输出:

AgentDynamic::agentmain(String,Instrumentation)

myagent

发表评论
评论通过审核之后才会显示。