Предположим, у вас есть сервер JMX (псевдоним «JMX Agent» псевдоним «JVM, к которому вы хотите подключиться»), запущенный на «ЦЕЛЕВОЙ МАШИНА» с портом реестра RMI в «RMI REGISTRY PORT» и портом сервера JMX RMI в «JMX RMI ПОРТ СЕРВЕРА'.
Заметка:
Реестра RMI говорит клиентам JMX , где найти порт сервера JMX RMI ; информацию можно получить под ключ jmxrmi.
Порт реестра RMI обычно известен как он устанавливается через свойство системы при запуске виртуальной машины Java.
Порта сервера JMX RMI , как правило , не известно , как виртуальная машина выбирает его случайным образом (если не будут приняты другие меры предосторожности).
Следующий URI приведет к успешному подключению (проверено)
service:jmx:rmi://192.168.30.10:1234- говорит, что на машине с IP-адресом 192.168.30.10 установлен JMX Agent. Агент JMX использует (TCP) порт 1234 для предоставления услуг JMX через RMI (в основном действует как сервер RMI).
/jndi/rmi://192.168.30.10:2344/jmxrmi - говорит, что заглушка RMI для взаимодействия с агентом JMX через RMI может быть найдена в реестре RMI, который работает на машине с IP-адресом 192.168.30.10 и использует (TCP) порт 2344. Чтобы получить заглушку RMI, вам необходимо найдите привязку "jmxrmi".
Предыдущие ответы предполагают, что вторая часть URL-адреса предназначена для получения порта сервера JMX RMI-сервера. Это не так. Порт сервера JMX RMI - (TCP) 1234 и является частью URL-адреса. Из реестра RMI вы получаете заглушку RMI ( javax.management.remote.rmi.RMIServerImpl_Stub), которую можно использовать для связи с агентом JMX (сервер MBean) через RMI.
Поскольку вы заявляете, что ответ @ david-tonhofer неверен, не могли бы вы объяснить, как работают URL-адреса без пары 1-й IP: порт ( 192.168.30.10:1234в этом примере)? то есть URL-адреса, которые начинаются с service:jmx:rmi:///jndi/rmi:. Одной из причин этого является настолько запутанной в целом в том , что , когда мы задаем JMX порт при запуске виртуальной машины Java, он не ссылается на RMI в любом месте: -Dcom.sun.management.jmxremote.port=2344. (Обратите внимание, что, по моему опыту, порт jmxremote связан с частью URL-адреса «Реестр RMI», а не с частью «Сервер JMX RMI».)
erik.weathers
Существует несколько способов указать IP-адрес и порт, которые будет использовать агент JMX. Если вы хотите привязать его к определенному IP и адресу, который вы можете использовать service:jmx:rmi://192.168.30.10:1234. В качестве альтернативы вы можете использовать com.sun.management.—свойства. Используйте URL-адрес, например, service:jmx:rmi:///…чтобы Java могла выбрать IP-адрес и порт за вас (случайным образом или на основе свойств системы). Используйте URL-адрес, например, service:jmx:rmi://0.0.0.0:1234для привязки порта 1234 ко всем интерфейсам. И так далее. Надеюсь это поможет.
Ответы:
Я повторно воспользуюсь ответом, который я написал ранее для этого вопроса: не удается подключиться к Tomcat MBeanServer через jconsole в Java6
Это не все, но может помочь:
Предположим, у вас есть сервер JMX (псевдоним «JMX Agent» псевдоним «JVM, к которому вы хотите подключиться»), запущенный на «ЦЕЛЕВОЙ МАШИНА» с портом реестра RMI в «RMI REGISTRY PORT» и портом сервера JMX RMI в «JMX RMI ПОРТ СЕРВЕРА'.
Заметка:
jmxrmi
.Следующий URI приведет к успешному подключению (проверено)
service:jmx:rmi://<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
Это выглядит мерзко. Давайте разрежем это на части.
Этот URI представляет собой RFC2609 «URL-адрес протокола определения местоположения службы» (ну, это действительно URI, верно?)
В его состав входят:
service
- постояннаяjmx:rmi
- тип услуги, состоящий из: абстрактного типаjmx
и схемы URLrmi
сок разлагается на:
//<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>
- ипсайт/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
- часть URLХорошо информированный клиент JMX подключается к "ipsite" для обмена JMX-over-RMI; но как насчет клиента JMX, который не ЗНАЕТ этот порт? Терпение...
Часть URL разбивается на:
/jndi/
- Похоже, это сообщает JMX-клиенту, что он может получить поисковую информацию в следующем месте.rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
- Да, мы получаем информацию о сервере JMX RMI в реестре RMI под ключом поискаjmxrmi
Это в некотором роде «повозка перед лошадью», поскольку сначала нужно обратиться в реестр RMI, указанный в последней части URL-адреса SLP.
Почесав затылок, интуитивно попробуем:
service:jmx:rmi://<TARGET_MACHINE>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
Да, работает! Порт сервера JMX RMI хорошо получается из реестра. Если подумать, целевая машина также должна быть получена из реестра, таким образом:
service:jmx:rmi:///jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
Более того, это тоже работает!
Рекомендации:
источник
Объяснять:
service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
service:jmx:rmi://192.168.30.10:1234
- говорит, что на машине с IP-адресом 192.168.30.10 установлен JMX Agent. Агент JMX использует (TCP) порт 1234 для предоставления услуг JMX через RMI (в основном действует как сервер RMI)./jndi/rmi://192.168.30.10:2344/jmxrmi
- говорит, что заглушка RMI для взаимодействия с агентом JMX через RMI может быть найдена в реестре RMI, который работает на машине с IP-адресом 192.168.30.10 и использует (TCP) порт 2344. Чтобы получить заглушку RMI, вам необходимо найдите привязку "jmxrmi".Предыдущие ответы предполагают, что вторая часть URL-адреса предназначена для получения порта сервера JMX RMI-сервера. Это не так. Порт сервера JMX RMI - (TCP) 1234 и является частью URL-адреса. Из реестра RMI вы получаете заглушку RMI (
javax.management.remote.rmi.RMIServerImpl_Stub
), которую можно использовать для связи с агентом JMX (сервер MBean) через RMI.Надеюсь это поможет.
источник
192.168.30.10:1234
в этом примере)? то есть URL-адреса, которые начинаются сservice:jmx:rmi:///jndi/rmi:
. Одной из причин этого является настолько запутанной в целом в том , что , когда мы задаем JMX порт при запуске виртуальной машины Java, он не ссылается на RMI в любом месте:-Dcom.sun.management.jmxremote.port=2344
. (Обратите внимание, что, по моему опыту, порт jmxremote связан с частью URL-адреса «Реестр RMI», а не с частью «Сервер JMX RMI».)service:jmx:rmi://192.168.30.10:1234
. В качестве альтернативы вы можете использоватьcom.sun.management.—
свойства. Используйте URL-адрес, например,service:jmx:rmi:///…
чтобы Java могла выбрать IP-адрес и порт за вас (случайным образом или на основе свойств системы). Используйте URL-адрес, например,service:jmx:rmi://0.0.0.0:1234
для привязки порта 1234 ко всем интерфейсам. И так далее. Надеюсь это поможет.Согласно javax.management.remote.rmi
этот URL собран так
service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname
источник