我在使用com.sun.tools.attach.VirtualMachine
Java API 时遇到问题。我的目标应用程序(Tomcat)正在使用 Oracle Hot Spot 版本 1.7.0_80 运行。我正在尝试通过动态附加从另一个使用 Open JDK 10.0.2 的 Java 程序(在同一台机器上)连接该 tomcat。我正在使用下面的代码
...............
String agentPath = Agent.class.getProtectionDomain().getCodeSource().getLocation().getPath();
agentPath = convertFileSeparators(agentPath, File.separatorChar);
String agentInstallDir = agentPath.substring(0, agentPath.lastIndexOf(File.separator));
System.out.println("My Java agent installed on the location :"+agentPath);
StringBuilder sb = new StringBuilder();
sb.append("MY_RELIC_HOME").append("=").append(agentInstallDir);
if (agentArgs != null) {
sb.append(",").append(agentArgs);
}
com.sun.tools.attach.VirtualMachine virtualMachine = com.sun.tools.attach.VirtualMachine.attach(vmID);
virtualMachine.loadAgent(agentPath, sb.toString());
.........
我能够成功附加到目标应用程序,但附加后在我的附加程序(运行打开的 JDK 10.0.2)中出现以下异常。
com.sun.tools.attach.AgentLoadException: 0
at jdk.attach/sun.tools.attach.HotSpotVirtualMachine.loadAgentLibrary(HotSpotVirtualMachine.java:104)
at jdk.attach/sun.tools.attach.HotSpotVirtualMachine.loadAgentLibrary(HotSpotVirtualMachine.java:115)
at jdk.attach/sun.tools.attach.HotSpotVirtualMachine.loadAgent(HotSpotVirtualMachine.java:139)
at com.eg.agent.Agent.main(Agent.java:582)
第 582 行的代码是virtualMachine.loadAgent(agentPath, sb.toString());
.
如果我使用 Java 7 或 8 运行我的附加程序,没有例外并且附加成功。
为什么com.sun.tools.attach.AgentLoadException: 0
在使用 JDK 10 时会出现异常?