JMX 서비스 URL을 이해하려고합니다.
service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
누군가가 이것을 이해하도록 도울 수 있다면 좋을 것입니다.
감사
답변:
이 질문에 대해 이전에 작성한 답변을 재사용합니다 .Java6에서 jconsole을 통해 Tomcat의 MBeanServer에 연결할 수 없습니다 .
완전하지는 않지만 도움이 될 수 있습니다.
'RMI REGISTRY PORT'에 RMI 레지스트리 포트가 있고 ' JMX RMI 에 JMX RMI 서버 포트가 있는' TARGET MACHINE '에서 실행중인 JMX 서버 (별칭'JMX 에이전트 '별칭'연결하려는 JVM ')가 있다고 가정합니다. 서버 포트'.
노트 :
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
- 추상 유형 과 URL 체계 로 구성된 서비스 유형 jmx
rmi
수액 은 다음과 같이 분해됩니다.
//<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>
-ipsite/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
-예, 조회 키 아래의 RMI 레지스트리에서 JMX RMI 서버에 대한 정보를 얻습니다. jmxrmi
SLP URL 의 후반부에 의해 제공되는 RMI 레지스트리에 먼저 연락해야하기 때문에 이것은 다소 말을 앞두고 있습니다.
머리를 긁은 후 직관적으로 시도해 봅시다.
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 에이전트가 있음을 나타냅니다. JMX 에이전트는 (TCP) 포트 1234를 사용하여 RMI를 통해 JMX 서비스를 제공합니다 (기본적으로 RMI 서버 역할을 함)./jndi/rmi://192.168.30.10:2344/jmxrmi
-RMI를 통해 JMX 에이전트와 상호 작용하는 RMI 스텁은 IP 주소가 192.168.30.10 인 컴퓨터에서 실행되고 (TCP) 포트 2344를 사용하는 RMI 레지스트리에서 찾을 수 있습니다. 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:
. 이것이 일반적으로 매우 혼란스러운 이유 중 하나는 JVM을 시작하는 동안 jmx 포트를 지정할 때 어디에서나 RMI를 참조하지 않기 때문 -Dcom.sun.management.jmxremote.port=2344
입니다.. (내 경험상 jmxremote 포트는 "JMX RMI 서버"부분이 아니라 URL의 "RMI 레지스트리"부분과 연관되어 있습니다.)
service:jmx:rmi://192.168.30.10:1234
. 또는 com.sun.management.—
속성 을 사용할 수 있습니다 . 다음과 같은 URL을 사용하여 service:jmx:rmi:///…
Java가 IP 및 포트를 선택하도록하십시오 (임의로 또는 시스템 속성에 따라). service:jmx:rmi://0.0.0.0:1234
모든 인터페이스에서 포트 1234를 바인딩 하는 것과 같은 URL을 사용하십시오 . 등등. 도움이 되었기를 바랍니다.
javax.management.remote.rmi 에 따르면
이 URL은 이렇게 조립됩니다
service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname