Ошибка подключения к процессу: 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
,
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)?