Ошибка Отладки Соединения 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 к этому порту, я успешно подключился.