JMX URL 설명


답변:


106

이 질문에 대해 이전에 작성한 답변을 재사용합니다 .Java6에서 jconsole을 통해 Tomcat의 MBeanServer에 연결할 수 없습니다 .

완전하지는 않지만 도움이 될 수 있습니다.

'RMI REGISTRY PORT'에 RMI 레지스트리 포트가 있고 ' JMX RMIJMX RMI 서버 포트가 있는' TARGET MACHINE '에서 실행중인 JMX 서버 (별칭'JMX 에이전트 '별칭'연결하려는 JVM ')가 있다고 가정합니다. 서버 포트'.

노트 :

  1. RMI 레지스트리는 어디에서 찾을 수 JMX 클라이언트 알려줍니다 JMX RMI 서버 포트를 ; 정보는 키 아래에서 얻을 수 있습니다 jmxrmi.
  2. RMI 레지스트리 포트 가 JVM을 시작할 때 시스템 속성을 통해 설정되어 일반적으로 알려져있다.
  3. JMX RMI 서버 포트는 일반적으로 하지 (다른 예방 조치가 취해지지 않은 경우) JVM이 무작위를 선택라고도합니다.

다음 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
  • 나머지 -SAP (서비스 액세스 프로토콜 사양)

수액 은 다음과 같이 분해됩니다.

  • //<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

더 좋은 것은 그것도 작동합니다!

참조 :

  1. http://download.oracle.com/javase/6/docs/api/javax/management/remote/rmi/package-summary.html
  2. http://download.oracle.com/javase/6/docs/api/javax/management/remote/JMXServiceURL.html
  3. http://mx4j.sourceforge.net/docs/ch03s04.html
  4. http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html#gdevg
  5. http://www.rfc-editor.org/rfc/rfc2609.txt

7

설명하기:

service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
  1. service:jmx:rmi://192.168.30.10:1234-IP 주소가 192.168.30.10 인 시스템에 JMX 에이전트가 있음을 나타냅니다. JMX 에이전트는 (TCP) 포트 1234를 사용하여 RMI를 통해 JMX 서비스를 제공합니다 (기본적으로 RMI 서버 역할을 함).
  2. /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 스텁 ( )입니다.

도움이 되었기를 바랍니다.


@ david-tonhofer의 답변이 올바르지 않다고 말씀 하셨으므로 첫 번째 IP : port 쌍 ( 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 레지스트리"부분과 연관되어 있습니다.)
erik.weathers

JMX 에이전트가 사용할 IP 및 포트를 지정하는 방법에는 여러 가지가 있습니다. 특정 IP 및 주소로 수정하려면을 사용할 수 있습니다 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을 사용하십시오 . 등등. 도움이 되었기를 바랍니다.
Prolancer

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.