Не удалось подключиться к JMX remote с помощью jconsole


I развивающийся под Spring3. 1 автономный env.

Я пытаюсь подключить мое приложение удаленно через jconsole. Он работает локально, но когда я развертываю свое приложение в linux-машине, он получает тайм-аут.

Я использую Daemon для запуска моей среды.

Это то, что я добавляю в run.sh сценарий:

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=6969 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 
com.mypackage.daemon.FixDaemon

И внутри applicationContext.xml:

<context:mbean-server />
<context:mbean-export />

Теперь на linux машине после выполнения netstat вот что мы видим:

[root@ logs]# netstat -an | grep 6969
tcp        0      0 :::6969                     :::*                        LISTEN

Итак, это похоже, он действительно слушает.

Но когда я добавляю свой ip:6969 внутри интерфейса jconsole, я получаю всплывающее окно с ошибкой соединения.

Любые идеи, что я делаю не так?

Спасибо, луч.

2 4

2 ответа:

Сначала попробуйте добавить также эту опцию в ваше приложение:

-Djava.rmi.server.hostname=<ip>

Также имейте в виду, что jconsole использует RMI для связи. Это означает, что jconsole сначала подключается к ip: 6969. Затем сервер генерирует случайный порт X, который передается обратно в jconsole. Затем Jconsole открывает другое соединение с ip:X. Поскольку X является случайным, вы не можете открыть этот конкретный порт в брандмауэре. Вы должны либо открыть все порты, либо использовать прокси-сервер socks, который является другой темой.

  1. Попробуйте подключиться к этому порту с помощью telnet с Вашего компьютера. Если это не удается, это обычно происходит из-за брандмауэра, сбрасывающего пакеты. Вам придется поговорить с администратором сети, чтобы открыть этот порт.

    Примечание : вам придется открыть два порта. Один для привязки RMIRegistry, а другой для экспорта объектов RMI. РМИ обычно экспорт объектов на случайных портах. Но это не будет работать в среде с брандмауэром, поэтому вам придется настройте порт, на который он экспортируется. Это делается с помощью URL-адреса RMI.

  2. Если вы используете это в Linux, то сделайте hostname -i, если он возвращает 127.0.0.1, то исправьте /etc/hosts. запись FAQ для JConsole содержит дополнительную информацию об этом.

  3. Другой вариант, который я настоятельно рекомендую, - это посмотреть на Jolokia , который не включает в себя изменение конфигурации брандмауэра, но все еще предоставляет преимущества JMX через HTTP.