小编mik*_*key的帖子

java VirtualMachine.getSystemProperties()死锁

我正在使用Java Attach API连接到本地JVM.我正在做类似以下的事情

VirtualMachine vm = VirtualMachine.attach("8400");
Properties props = vm.getSystemProperties();
Run Code Online (Sandbox Code Playgroud)

在Windows机器上运行,如果我连接的VirtualMachine在attach和getSystemProperties调用之间关闭,getSystemProperties()将永远阻塞并在该线程中创建死锁.我跟踪了这​​个街区WindowsVirtualMachine.connectPipe().它是一种本机方法,因此在WindowsVirtualMachine.c connectPipe函数中调用ConnectNamedPipe.我在Windows机器上看到过一些关于ConnectNamedPipe死锁的帖子.我试过打断被阻止的线程,但是没有解锁线程.

我不太清楚解决方法是什么,但我会考虑不使用Attach API(虽然我更喜欢坚持我目前的解决方案).我正在使用Attach API来VirtualMachine.list()使JVM在本地计算机上运行.然后从那里我使用它来获取系统属性并通过JMX连接到它们.我知道我可以使用库创建一个自定义解决方案,通过网络在进程之间进行通信,但我宁愿在进程之间使用os级别的通信,这是我认为Attach API正在使用的.

所以我的问题是我的问题是否有任何变通方法?或者是否有任何库可以给我相同的功能VirtualMachine.list()

java api deadlock jvm

5
推荐指数
1
解决办法
374
查看次数

标签 统计

api ×1

deadlock ×1

java ×1

jvm ×1