jbx*_*jbx 7 java ipc java-attach-api
我试图找出主要操作系统上Java Attach API使用的进程间通信机制,但我似乎找不到对底层机制的太多引用.
我发现的唯一提及是在这里它指的是由Sun公司开发的,前一段时间的DOORS进程间通信机制 但我怀疑这是在Windows或Mac上使用的.大多数文章描述了Java Attach API以及如何加载共享库/ DLL,但是没有说明jvisualvm和本地JVM进程之间的通信是如何实际工作的.
这里提到tools.jar并且libattach.so(在Unix系统上)或attach.dll(在Windows上)负责支持Attach API,但我找不到很多关于它们如何在内部工作的细节.
那么Java Attach API的进程间通信如何在每个主流操作系统上运行?也就是Windows,Mac OSX和Linux.
Java Attach API 具有可插入的提供程序架构。动态附加提供程序特定于目标 VM。对于 Oracle 或 OpenJDK JVM,“sun”提供程序负责。此提供程序使用不同的方法,具体取决于操作系统。该协议还支持其他可维护性工具(如jcmd命令)
对于 Linux,它使用以下协议:
/tmp/.attach_pid%d/tmp/.java_pid%dunix 域套接字并在该套接字上侦听命令load告诉目标 JVM 加载代理实现。这在共享的 attachListener.cpp 中实现并加载 JVMTI 代理。JMX 使用的方法是“加载”,它加载指定的 JVMTI 代理,然后通过 RMI 定期连接。
较旧的 Java 版本使用 java.io.tmpdir 甚至环境定义的临时目录,但是对于较晚的版本 /tmp 是硬编码的。
在solaris 上使用Door IPC而不是unix 域套接字。在 Windows 上CreateRemoteThread,带有命名管道名称的 a用于此引导。
这在这里描述:http : //openjdk.java.net/groups/hotspot/docs/Serviceability.html#tattach(我没有检查过,但我希望 HP 端口使用 Linux 机制,OpenJDK AIX 端口使用) .
对于 IBM JDK,使用了类似的机制(具有更多配置),如下所述:https : //www.ibm.com/support/knowledgecenter/en/SSYKE2_7.0.0/com.ibm.java.win.70.doc/user /attachapi.html
似乎这是在 Java 平台调试器架构( JPDA )之上实现的(正如 Elliott Frisch 所指出的)。
在 Windows 操作系统上,使用共享内存传输。
在基于 Linux 的系统上,使用套接字传输。
更多详情可在这找到。
| 归档时间: |
|
| 查看次数: |
417 次 |
| 最近记录: |