JVM Attach API虚拟机。"Attach"的意思是什么?

4

我不太理解通过attach api“附加”到另一个虚拟机意味着什么。 我已经阅读了每个java程序都在自己的虚拟机中运行(请参见此处)。 那么,为了访问其他虚拟机的数据,例如MBeanServer,一个程序要“附加”到另一个jvm进程,内存中会发生什么? 一个虚拟机的字节码是否实际上调用另一个虚拟机的特殊请求以获取访问内存的权限,还是第一个虚拟机从内存卸载,然后两组代码共享一个虚拟机? 如果有人可以澄清这种附加看起来像什么,请从内存视角/虚拟机协商步骤(如果这就是所谓的步骤)阐述细节,非常感谢!

2个回答

1

一个很好的例子来解释一个场景,其中一个JVM连接到另一个JVM,就是使用Java Profilers。Profiler主要用于性能分析另一个JVM的洞察力。正在检查的应用程序附加到Profiler JVM,它内省堆/堆栈以确定关于正在检查的JVM的不同信息。

标准Profiler jvisualvm 广泛使用JVM TI API,例如执行和监视垃圾回收。Java Management Extensions(JMX)用作通用通信层。


2
我的问题涉及到“附加”是什么意思。是否打开了TCP套接字,是否发生了序列化,被附加的VM是否必须“批准”试图附加到它的VM?为了让一个VM附加到另一个VM,底层发生了什么? - Anil Vaitla
这取决于Attach API的实现(这意味着您应该使用相同的Java二进制文件来运行两个程序以最小化差异)。 - Thorbjørn Ravn Andersen

0

我调试了一下,我认为它使用Unix套接字与JVM进程通信。正如您所看到的,附加进程正在尝试打开socket_file,该文件位于进程目录下,如果该文件不存在,它将尝试创建attach文件,这应该是另一个Unix套接字文件,用于与VM通信。

debug


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接