Не удалось подключиться к 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 ответа:
Сначала попробуйте добавить также эту опцию в ваше приложение:
-Djava.rmi.server.hostname=<ip>
Также имейте в виду, что jconsole использует RMI для связи. Это означает, что jconsole сначала подключается к ip: 6969. Затем сервер генерирует случайный порт X, который передается обратно в jconsole. Затем Jconsole открывает другое соединение с ip:X. Поскольку X является случайным, вы не можете открыть этот конкретный порт в брандмауэре. Вы должны либо открыть все порты, либо использовать прокси-сервер socks, который является другой темой.
Попробуйте подключиться к этому порту с помощью telnet с Вашего компьютера. Если это не удается, это обычно происходит из-за брандмауэра, сбрасывающего пакеты. Вам придется поговорить с администратором сети, чтобы открыть этот порт.
Примечание : вам придется открыть два порта. Один для привязки RMIRegistry, а другой для экспорта объектов RMI. РМИ обычно экспорт объектов на случайных портах. Но это не будет работать в среде с брандмауэром, поэтому вам придется настройте порт, на который он экспортируется. Это делается с помощью URL-адреса RMI.
Если вы используете это в Linux, то сделайте
hostname -i
, если он возвращает 127.0.0.1, то исправьте/etc/hosts
. запись FAQ для JConsole содержит дополнительную информацию об этом.Другой вариант, который я настоятельно рекомендую, - это посмотреть на Jolokia , который не включает в себя изменение конфигурации брандмауэра, но все еще предоставляет преимущества JMX через HTTP.