Ошибка Отладки Соединения JConsole

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

Я могу telnet к удаленному серверу i.e

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)

вы, ребята, имеете представление о том, как отладить это (т. е. узнать, что не так)?

7 ответов


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

-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

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 появится отдельное окно, отображающее журналы.


Если вы запустите jconsole -debug Это дает вам больше диагностической информации о сбое. ссылка: http://blogs.oracle.com/jmxetc/entry/troubleshooting_connection_problems_in_jconsole

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


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

таким образом, все аргументы vm, используемые для открытия jconsole с удаленной машины, jvm на удаленной машине должны быть запущены с

 -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>

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


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


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


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

- Dcom.солнце.управление.jmxremote


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