2014-02-06 2 views
0

일부 서버에서 JMX를 사용할 때 일관된 문제가 있습니다. 이것이 일부에서는 작동하지만 일부는 이상한 방식으로 연결을 거부하는 것으로 보입니다.Java JMX가 정말 이상한 케이스로 연결을 거부했습니다.

포트가 열려 있고 로컬 호스트 또는 다른 호스트에서 텔넷으로 연결할 수 있습니다.

다음은 결함이있는 것 중 하나에 연결할 때 jmxterm에서 얻은 것입니다.

포트가 열려있는 경우이 문제가 발생 :

포트가 정말 닫혀있는 경우 이런 일이 발생
$>open 10.80.16.195:8091 
#RuntimeIOException: Runtime IO exception: Connection refused to host: 127.0.0.1; nested exception is: 
    java.net.ConnectException: Connection refused 

:

여기
$>open 10.80.16.195:9999 
#RuntimeIOException: Runtime IO exception: Failed to retrieve RMIServer stub: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: 10.80.16.195; nested exception is: 
    java.net.ConnectException: Connection refused] 

는 JVM (바람둥이)을 시작하기에 연결하는 데 사용되는 매개 변수입니다 : /usr/lib/jvm/java-7-oracle/bin/java -Djava.awt.headless=true -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8091 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.80.16.195 -classpath /opt/Confluence.5/bin/bootstrap.jar -Dcatalina.base=/opt/Confluence.5 -Dcatalina.home=/opt/Confluence.5 org.apache.catalina.startup.Bootstrap start

java -version 
java version "1.7.0_51" 
Java(TM) SE Runtime Environment (build 1.7.0_51-b13) 
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode) 

나는 비슷한 불평 관찰 다른 이들로부터는 아무런 이유도 없었습니다. 3-4 개의 서버를 사용했기 때문에 JMX 클라이언트가 될 가능성이 적어졌으며 모든 서버가 유사한 서버에서 작동하고 다른 서버에서는 작동하지 않는 것처럼 보입니다.

/etc/hosts은 127.0.1.1이보고 된 것을 기억하기 때문에 데비안 시스템에이 설정이 있다는 것을 알고 있습니다. 당신은 아마 JMX 기계의 라우팅 주소로 바인더 제본되어 관찰 수동으로 IP를 지정하는 경우 즉, 외부에서 연결을 허용 할 수있는 유일한 방법이기 때문에

127.0.0.1 localhost 
127.0.0.1 dowa-01.my.domain.com dowa-01 
# by default the previous line had 127.0.1.1 instead and this was causing problems with JMX  

# The following lines are desirable for IPv6 capable hosts 
::1  ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 

, 즉이다.

이제는 무엇이 문제입니까?

답변

2

에서의/etc/서버 호스트,이 라인을 대체 할 것이다 :이

127.0.0.1 dowa-01.my.domain.com dowa-01 

:

10.80.16.195 dowa-01.my.domain.com dowa-01 

서버의 JVM이의 IP 주소를 해결하는 것 localhost 그리고 127.0.0.1을 얻으십시오. 내 생각 엔 JMX는 127.0.0.1에서 원격 연결 만 수락하기 때문에 문제가 발생할 것입니다. 대신 자바가 실제 IP를 인식하고 그것에 귀 기울 이길 원합니다.

+0

미안하지만 그건 정말 나쁜 습관입니다. 필자는 설정 파일에 기계의 IP를 쓰지 않을 것입니다. JVM을 인스턴스화하는 스크립트조차도 공인 IP 주소를 감지하고 그것을 stat 명령에 사용합니다. – sorin

+0

죄송합니다. 문서에서 실수를했습니다.'-java.rmi.server.hostname = 10.80.16.195'가 작동하도록하려면 ... – sorin

+0

감사합니다. 어쨌든 감사합니다. 기계 고장 및 작동. – sorin

1

이 문제의 원인은 시스템의 공용 IP를 수동으로 지정해야하기 때문입니다. 그렇지 않으면 JMX/RMI가 올바르게 바인딩되지 않습니다.

IP=$(ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p') 
# if we have several IPs found, we pick the first one 
for IP in $IP 
do 
    break 
    done 
java .... -Djava.rmi.server.hostname=${IP}