当尝试将代理jar文件附加到在java中运行的另一个进程时,我遇到了异常:
com.sun.tools.attach.AttachNotSupportedException: 无法打开套接字文件:目标进程未响应或未加载HotSpot VM
我在使用java Oracle JDK 8_101 运行linux,但是在回答了这个问题之后我才意识到O.S对于这个问题的原因无关紧要。
编辑: 答案:
如果遇到这个问题,我之所以遇到这个问题,是因为我是从一个不同的JVM启动一个程序,而不是为系统指定的默认JVM。
即)
计划 (启动器) ,正在 JVM-1 (例如JDK_8_1,或JDK_8_1 / jdk / jre)。
计划 A (启动器) ,使用<创建一个流程strong> java -jar programB.jar
程序 B (目标) ,正在系统上运行& #39;默认JVM, JVM-2 (例如JDK_8_2,或JDK_8_2 / jre)。
计划 A (启动器) 不能对 计划 B (目标) ,因为JVM 计划< / strong> (启动器) 正在运行,与的JVM不匹配程序 B (目标) 正在运行,因此抛出 com.sun.tools.attach.AttachNotSupportedException:
答案 0 :(得分:3)
此问题的常见原因:
/tmp/.java_pid1234
已被删除(例如,通过定期清理/ tmp的预定作业)。-XX:+DisableAttachMechanism
选项启动。答案 1 :(得分:2)
问题:执行jcmd的其他用户
可能发生的情况是,调用jcmd的用户与运行该过程的用户不同。
示例:
解决方案:
在Linux上,请尝试以同一用户运行jcmd,因为该进程正在运行。
在这种情况下,您将得到错误提示。
问题:AppArmor
当启用了AppArmor来运行JVM实例(这会限制sys-calls)时,可能是打开套接字连接受到限制的情况。
解决方案:
更改AppArmor配置文件以进行处理