附加到进程的错误:sun.jvm.hotspot.debugger.DebuggerException:无法打开二进制文件

时间:2016-08-02 01:29:21

标签: java ubuntu jmap

当我使用jmap获取有关进程的堆信息时,我得到了类似的错误:

$jmap -heap process_id

Attaching to process ID process_id, please wait...
Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: cannot open binary
file
sun.jvm.hotspot.debugger.DebuggerException: sun.jvm.hotspot.debugger.DebuggerException:
cannot open binary file    

操作系统:Ubuntu 14.04

我通过更新DebuggerException: Can't attach to the process解决了另一个错误(kernel.yama.ptrace_scope = 0)。

请参阅:https://bugs.openjdk.java.net/browse/JDK-7050524

5 个答案:

答案 0 :(得分:17)

我遇到了同样的问题,但是当我OneWay给具有相关权限的正确用户时,问题就会消失。

答案 1 :(得分:4)

如果您尝试附加到不合格的流程,也会发生这种情况,因此最好重新确认您的pid。

例如,当我的一位朋友试图附加他们用于搜索符合条件的pid的{{1}}进程时,我的朋友就得到了这个。)。

答案 2 :(得分:2)

在我们的例子中,java进程使用.../JAVA_HOME/jre/bin/java二进制文件,而jmap进程使用.../JAVA_HOME/bin/jmap二进制文件。

一旦我们将J​​ava进程更改为使用.../JAVA_HOME/bin/java二进制文件,此问题就得到解决。我们能够成功运行jmap。

关键是使用JDK Java二进制文件而不是JRE Java二进制文件运行Java进程。

答案 3 :(得分:0)

与提出的问题没有直接关系。但是,在进行Java进程的线程转储时使用 jstack 命令时遇到了类似的错误。假设我要对其进行线程转储的Java进程的pid为1234。

我使用了命令jstack -l 1234 /home/users/a/thread-dump.txt

我在上面的命令中错过的是重定向操作符(>)。该命令的正确版本是

jstack -l 1234  > /home/users/a/thread-dump.txt

也许对某人有帮助:)

答案 4 :(得分:0)

我对jstack有相同的问题。原来,我没有使用Oracle JRE,而是使用OpenJDK作为该过程的运行时,但是仅安装了Oracle的JDK。 Oracle的jstack无法访问OpenJDK进程。另请参见Does OpenJDK have a tool similar to jstack (Oracle Java)?