Ошибка подключения к процессу: sun.jvm.hotspot.debugger.DebuggerException: не удается открыть двоичный файл

Когда я использую 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

2 ответа

Я столкнулся с той же проблемой, однако, когда я suПравильному пользователю, имеющему соответствующие разрешения, проблема исчезла.

Не имеет прямого отношения к заданному вопросу. Но я столкнулся с аналогичной ошибкой при использовании команды jstack при создании дампа потока Java-процесса. Скажем, pid java-процесса, для которого мне нужен дамп потока, равен 1234.

Я использовал команду jstack -l 1234 /home/users/a/thread-dump.txt

В приведенной выше команде я пропустил оператор перенаправления (>). Правильная версия команды:

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

Может кому поможет:)

Это также произойдет, если вы попытаетесь присоединиться к неподходящему процессу, поэтому рекомендуется подтвердить свой pid.

Например, мой друг получил это, когда они пытались присоединиться к jps процесс, который они использовали для поиска подходящих пидов.

В нашем случае java-процесс использовал .../JAVA_HOME/jre/bin/java двоичный файл, а процесс jmap использовал .../JAVA_HOME/bin/jmap двоичный.

Как только мы изменили процесс Java на использование .../JAVA_HOME/bin/javaдвоичный, то проблема была решена. Нам удалось успешно запустить jmap.

Ключ состоит в том, чтобы использовать запуск java-процесса с использованием двоичного файла java JDK вместо двоичного файла java JRE.

У меня была такая же проблема с jstack. Оказалось, что я использовал не Oracle JRE, а OpenJDK в качестве среды выполнения для процесса, а был установлен только Oracle JDK. Oracle jstackне может получить доступ к процессу OpenJDK. См. Также Есть ли в OpenJDK инструмент, похожий на jstack (Oracle Java)?

Другие вопросы по тегам