在运行时添加代理
可以在运行时将代理添加到 JVM。要加载代理,你需要使用 Attach API 的 VirtualMachine.attatch(String id) 。然后,你可以使用以下方法加载已编译的代理程序 jar:
public static void loadAgent(String agentPath) {
String vmName = ManagementFactory.getRuntimeMXBean().getName();
int index = vmName.indexOf('@');
String pid = vmName.substring(0, index);
try {
File agentFile = new File(agentPath);
VirtualMachine vm = VirtualMachine.attach(pid);
vm.loadAgent(agentFile.getAbsolutePath(), "");
VirtualMachine.attach(vm.id());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
这不会在加载的代理中调用 premain((String agentArgs,Instrumentation inst) ,而是调用 agentmain(String agentArgs,Instrumentation inst) 。这需要在代理 Manifest.mf 中设置 Agent-Class 。