javaagent使用介绍
- 2021-12-25 23:33:00
- admin
- 原创 1637
一、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