首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Attach API使用哪种进程间通信机制?

Java Attach API使用哪种进程间通信机制?
EN

Stack Overflow用户
提问于 2015-12-28 20:21:46
回答 2查看 774关注 0票数 7

我试图找出Java Attach API在主要操作系统上使用的进程间通信机制,但我似乎找不到太多关于底层机制的参考资料。

我发现唯一提到的是here,它指的是不久前由Sun开发的DOORS进程间通信机制。但我怀疑这是否适用于Windows或Mac。大多数文章都描述了Java Attach API以及如何加载共享库/DLL,但是没有说明jvisualvm和本地JVM进程之间的通信实际上是如何工作的。

Here提到,tools.jarlibattach.so (在Unix系统上)或attach.dll (在Windows上)负责支持Attach API,但我找不到他们内部如何工作的更多细节。

那么,Java Attach API的进程间通信在每个主流操作系统上是如何工作的呢?即Windows、Mac OSX和Linux。

EN

回答 2

Stack Overflow用户

发布于 2017-08-23 18:04:20

Java Attach API具有可插拔的提供程序体系结构。动态连接提供程序特定于目标VM。在Oracle或sun的情况下,“OpenJDK”提供者负责。此提供程序使用不同的方法,具体取决于操作系统。该协议还支持其他可服务性工具(如jcmd命令)

对于Linux,它使用以下协议:

  • 收集目标JVM的pid并为目标JVM
  • 创建一个标志文件,如果标志文件存在,则信号处理程序将启动attach listener thread
  • 连接侦听器线程将创建一个/tmp/.java_pid%d unix域套接字,并在该套接字上侦听命令

<代码>H113典型的命令是<代码>d14,它告诉目标JVM加载代理实现。这在shared attachListener.cpp中实现,并加载一个JVMTI代理。

JMX使用的方法是“加载”,它加载指定的JVMTI代理,然后通过RMI定期连接。

较早的Java版本使用java.io.tmpdir,甚至是环境定义的临时目录,而对于更高版本,/tmp是硬编码的。

在solaris上,使用的是门IPC,而不是unix域套接字。在windows上,具有命名管道名称的CreateRemoteThread用于此引导。

这里描述了这一点: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

票数 5
EN

Stack Overflow用户

发布于 2015-12-28 20:36:40

这似乎是在Java Platform Debugger Architecture (JPDA)之上实现的(正如Elliott Frisch所指出的)。

在Windows操作系统上,使用共享内存传输。

在基于Linux的系统上,使用套接字传输。

更多细节可以在here上找到。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34493468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档