Ошибка отладки JConsole - PullRequest
       6

Ошибка отладки JConsole

21 голосов
/ 28 марта 2011

У меня развернуто веб-приложение на удаленном сервере смолы, и на нем включен JMX.

Я могу подключиться к удаленному серверу, т. Е.

franz@see:/tmp$ telnet <remote-ip> 5555
Trying <remote-ip>...
Connected to <remote-ip>.
Escape character is '^]'.
��sr5javax.management.remote.message.HandshakeBeginMessage�,���6profilestLjava/lang/String;Lversionq~xppt1.0^]

telnet> q
Connection closed.

Но я не могу подключиться к нему с помощью JConsole

$JAVA_HOME/bin/java -cp $JAVA_HOME/lib/jconsole.jar:$JAVA_HOME/lib/tools.jar:pm-common/lib/jmxremote_optional-1_0_1_3.jar sun.tools.jconsole.JConsole service:jmx:jmxmp://<remote-ip>:5555

Я пробовал это в следующих версиях Java, но в обоих случаях я получаю сообщение «Ошибка подключения».

## where JAVA_HOME=/opt/java/64/jdk1.5.0_22
java version "1.5.0_22"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03)
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_22-b03, mixed mode)

## where JAVA_HOME=/opt/java/64/jdk1.6.0_17
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) 64-Bit Server VM (build 14.3-b01, mixed mode)

Ребята, у вас есть какие-либо идеи относительно того, как отладить это (то есть выяснить, что не так)?

Ответы [ 8 ]

32 голосов
/ 16 сентября 2011

Убедитесь, что вы запускаете приложение со следующими установленными свойствами java

-Dcom.sun.management.jmxremote.port=9005
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

Попробуйте подключиться сейчас.Если вы хотите отладить это, вы можете запустить jconsole с помощью следующей команды

jconsole -J-Djava.util.logging.config.file=path_to_logging.properties_for_jconsole

Ниже приведено содержимое файла logging.properties

Logging.properties

handlers = java.util.logging.ConsoleHandler


.level = INFO

java.util.logging.ConsoleHandler.level = FINEST

java.util.logging.ConsoleHandler.formatter = \

java.util.logging.SimpleFormatter

// Use FINER or FINEST for javax.management.remote.level - FINEST is

// very verbose...

javax.management.level = FINEST

javax.management.remote.level = FINER

После запуска jconsole отдельнаяпоявится окно с журналами.

20 голосов
/ 11 января 2012

, если вы запустите jconsole -debug, это даст вам больше диагностической информации о сбое.См. запись в блоге Дэниела Фукса «Устранение неполадок с соединением в JConsole» .

Я сделал это, и это показало, что я использую 32-битную jconsole, целевой процесс был запущен с другим (64-битным) JVM, так что, видимо, это не разрешено, и поэтому он терпел неудачу.

10 голосов
/ 28 августа 2014

Это, наконец, заставило меня работать: предоставив эту дополнительную опцию: -Djava.rmi.server.hostname=<ip addres where jvm is running

Так что все аргументы vm, используемые для открытия jconsole с удаленного компьютера, должны запускаться с jvm на удаленном компьютере1004 *

 -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.port=<port> -Dcom.sun.management.jmxremote -com.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=<ip address>

Весь процесс указан здесь

3 голосов
/ 01 июня 2011

Я столкнулся с той же проблемой при запуске Java-процесса через cygwin.JConsole не может подключиться.Запустил его через win7-cmd все работает как положено.

1 голос
/ 18 июля 2013

У меня была похожая проблема, что удаленная машина находилась за брандмауэром, а брандмауэр блокировал порты, определенные как -Dcom.sun.management.jmxremote.port и RMI 46924. После разрешения подключиться к этим портам, я успешно подключился.

1 голос
/ 28 марта 2011

Если ваше приложение работает на JDK 1.6 , тогда вы сможете его подключить.Если он использует JDK до 1.6 , запустите его, указав следующий аргумент JVM

-Dcom.sun.management.jmxremote

1 голос
/ 28 марта 2011

Я не знаю, полезно ли это, но, возможно, вам следует использовать двоичный файл jconsole в каталоге bin JDK, а не недокументированные (и могут быть изменены) классы sun. * Для запуска консоли

0 голосов
/ 13 марта 2019

Если вы обращаетесь к машине за брандмауэром, вам нужно открыть порты JMX и RMI.
В этом контексте вам гораздо лучше принудительно ввести значение RMI, чем полагаться на автоматически назначенный
InВ моем случае я пытался получить доступ к Tomcat, поэтому мне пришлось сделать следующее:

#!/bin/sh
CATALINA_OPTS="$CATALINA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8008 -Dcom.sun.management.jmxremote.rmi.port=8007 -Dcom.sun.
management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

, а затем

firewall-cmd --zone=public --add-port=8008/tcp --permanent
firewall-cmd --zone=public --add-port=8007/tcp --permanent
firewall-cmd --reload
...