Jvm 启动的时候可以通过启动参数加载 agent 相关代码,从而获得 JVM 相关信息。 但是我看到 jprofiler 可以用 attach 的方式,在 jvm 运行的时候获得 Jvm 相关信息。这是怎么实现的,怎么实现这种无侵入式的获得 JVM 相关信息的?
1
senninha 2020-11-10 12:11:26 +08:00
另起一个普通的 Jvm 进程,获取目标进程的 pid,传入 agent jar 的路径,目标进程就会 load 进定制的 agnet jar 包。
``` VirtualMachine vm = VirtualMachine.attach(pid); try { vm.loadAgent(agentPath, agentServerPath); } finally { vm.detach(); } ``` |
2
fantastM 2020-11-10 14:59:30 +08:00
看 https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html 的 Starting Agents After VM Startup 小节
|