2011-03-21 3 views
3

JDK1.6에서 jconsole.exe 및 JVisualVM.exe에 대한 경험이 풍부하고 Windows JVM에서 수천 번 연결되었습니다. JMX.remote를 통한 다른 컴퓨터의 Windows JVM이지만 Linux 호스트에서 실행중인 Java 인스턴스를 모니터링하려고하면 실패합니다 (Windows 호스트에서 JMX 리스너를 redhat에, SUSE를 Amazon EC2에서 시도 함). 나 또한 jconsole.exe를 사용하여 시도하고 비슷한 오류가 발생합니다.JMX : Windows 시스템과 연결하여 Linux 시스템의 JMX 포트를 모니터합니다.

이런 종류의 JMX 연결에 문제가있는 이유는 누구나 생각할 수있는 이유가 있습니까? 내가 시도 할 수있는 아이디어는 없나요? 누군가 "실제로"이것을 해왔고, 내가 견디면 그것이 효과가있을 것이라고 말할 수 있을까?

"Cannot connect using service:jmx:rmi:///jndi/rmi://<jmx service ip>:8001/jmxrmi" 

내 원격 JMX 서비스 설정은 다음과 같이이다 :

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=8001 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.hostname=<jmx service ip> 

는 비슷한 질문에서 발견

내가 (원격 접속 시도) JVisualVM에서 얻을 오류는이 같은 것입니다 this link하지만 내 질문에는 대답하지 않았습니다.

"iptables"가 서비스로 활성화되어 있지 않으며 켜져 있지 않아 방화벽 차단 기능이 이미 구현되지 않았 음을 확인했습니다. 또한, windows와 linux 컴퓨터는 모두 10.0.0.0 개인 내부 서브넷에 함께 있습니다. 나는 포트 8001에 텔넷하여 그곳에있는 것을 확인하고 리눅스 머신에서 리스닝 (netstat -ap)을 할 수있다.

답변

6

시스템 속성 java.rmi.server.hostname을 참조하십시오. Linux 서버 JVM에서이 시스템 특성을 호스트의 공용 IP로 설정하십시오. 그런 다음 클라이언트 JMX URL의 공용 IP를 사용하십시오.

+0

java docs에 대한 링크가 깨졌습니다 – harschware

+1

죄송합니다 ... 업데이트 된 링크. 아무도 Java 1.4를 사용하지 않는다고 생각합니다. :) – Nicholas

2

당신의 문제는 RMI 구현이 방화벽을 통해 일하기가 어려우며 작업을 위해 지정한 포트 이상을 필요로한다는 것입니다. 자신의 컴퓨터 또는 동일한 네트워크의 컴퓨터에 연결하는 경우 일반적으로 알아 채지 못할 것입니다. This post describes the problems you will run into quite well

내가 너라면, 대체 프로토콜로 jmxmp를 설정하려고합니다. 그렇게하려면 jmxremote_optional.jar (오라클 무료, "JMX Remote API 1.0.1_04 Reference Implementation" from here)을 서버와 jvisualvm classpath에 모두 추가해야합니다.하지만 그만한 가치가 있습니다.

Google에 jmxmp를 사용하면 설정 방법에 대한 몇 가지 예를 찾을 수 있습니다. 첫 번째 히트 중 하나는 http://pub.admc.com/howtos/jmx/distributed-chapt.html#jmxmp-sect입니다.이 코드는 약간 코드 지향적 일 수 있지만 어쨌든 여기에 추가 할 수 있습니다. 몇 가지 좋은 문장에서 jmxmp와 가장 비슷합니다.

서버 측 엔드 포인트를 정의하는 방법은 실행중인 내용에 따라 다릅니다. 대부분의 응용 프로그램 서버에서는 jmxmp가 활성화 된 jmx 서비스 URL을 입력 할 수 있지만 서버가 처음부터 작성된 경우 익숙한 java에 -D 스위치를 사용하는 대신 코드에서 직접 설정해야 할 수 있습니다.

문제가 발생하면 더 구체적인 질문을하고 답해주십시오.

편집 : 당신은 클래스 패스에 항아리를 추가 한 후 , 당신은 당신의 코드에서해야 할 유일한 것은 (당신은 이미 당신을 위해 그것을 처리하는 서버 응용 프로그램을 사용하지 않는 가정)는 다음 (생략이다 선언, 예외 처리 등) :

url=new JMXServiceURL(jmxurl); 
this.server = JMXConnectorServerFactory.newJMXConnectorServer(url, null, ManagementFactory.getPlatformMBeanServer()); 
this.server.start(); 
+0

:-) 행운을 빕니다. – djangofan

+1

문제는 지정된 포트를 차단하고 있지 않은지 확인하는 것만으로는 충분하지 않다는 것입니다. 더 많은 것이 있습니다 (첫 번째 링크에서 설명). 어쨌든, 작동시킬 수는 있지만 jmxmp는 작업하기가 훨씬 쉬우 며 (imho) 멀리서 잘 작동합니다. – Fredrik

+0

"-D"인수가 JMXMP 수신기를 가져 오기 위해 JVM에 있어야하는 것에 대한 설명서를 찾을 수 없습니다. 또는 Jetty가 설정 파일을 통해 코드에서 구현 한 방식과 같이 코드로 구현하지 않으면 작동하지 않습니까? – djangofan

1

Windows 컴퓨터에서 Linux 상자에 SSH 터널을 만들려고 했습니까?http://oldsite.precedence.co.uk/nc/putty.html

아니면 Cygwin에서있는 경우 7777 당신의 윈도우 머신의 포트이고, 단지 ssh -f [email protected] -L 7777:remote-server.com:123 -N을 시도하고 123은 JMX 명령에 수신하는 원격 리눅스 박스에있는 포트입니다.

위의 경우 Windows 상자에서 jconsole 또는 visualvm을 사용하고 localhost:7777에 연결할 수 있습니다.

iptables가 비활성화되어 있지만, JMX가 Linux 호스트로 SSHing하고 jconsole의 명령 줄 JMX 모드 (Linux 상자에서)를 사용하여 해당 포트에서 정상적으로 작동하는지 확인하십시오.

+0

Bitwise Tunnelier SSH 클라이언트를 사용하여 클라이언트 - 서버 포트 포워딩을 설정하고 있습니다. 아직도 작동시키지는 못하지만 희망이있는 것 같기 때문에 좀 더 자세히 설명해 드리겠습니다 ... – djangofan

+0

포트 포워딩 기술이 작동하는지 확인하려면 작동하는 원격 서버의 포트와 함께 사용하십시오. 포트 80에서 실행중인 아파치 인스턴스와 마찬가지로 'curl http : // localhost'를 사용하여 해당 상자의 명령 행에서 액세스 할 수 있습니다. 포트가 작동하는 것을 알게되면 Windows 상자에서 터널/포트 포워드를 설정하고 액세스 할 수 있는지 확인하십시오. 이렇게하면 포트 포워딩이 제대로 작동하고 문제의 범위를 JMX 서버로 제한 할 수 있습니다. – domspawn

0

실제로이 문제를 직접 해결하고 알아 냈습니다.

문제는 RMI 연결입니다. 사용하는 포트를 예측할 수 없으므로 방화벽에서 작동하지 않을 수 있습니다.

해결 방법은 SSH 프록시를 사용하는 것입니다

  1. SSH 응용 프로그램이 실행하지만,이 같은 -D 옵션을 사용하는 상자 : REMOTEHOST -D 9999

    @

    SSH 사용자를

    Windows에서 한, 위의 명령을 실행하기 위해 Cygwin에서 사용하거나 사용자가 GUI를 통해 퍼티와 같은 일을 할 수있다 (여기에 안내 : http://blog.ashurex.com/2012/03/15/creating-ssh-proxy-tunnel-putty/를)

    이 포트에, '네트워크'로컬 호스트에서 양말 프록시를 사용하도록 구성에서, 포트 9999

  2. 열기 JVisualVM과 환경 설정에서 로컬 컴퓨터에 양말 프록시를 시작합니다 9999

위와 같이하면 정상적으로 원격 시스템에 연결할 수 있어야하며 모든 RMI 트래픽이 이제 SSH 프록시를 통과하기 때문에 방화벽을 통과하여 잘 작동합니다.

나는 (내가 내 편집에서 위에 말한대로)하지만 난 당신의 제안을보고 곧 당신에게 얻을 것이다 더 포트 방해가 있다는 것을 확인하는