我正在尝试在Java进程上设置远程JMX监视。 这些是我给JVM启动它的选项:
JAVA_OPTS="-server -Xms1G -Xmx1G -XX:MaxPermSize=512m " JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=57011 -Dcom.sun.management.jmxremote.authenticate=false" JMX_OPTS="$JMX_OPTS -Dcom.sun.management.jmxremote.ssl=false -Dfoo.jmx=true -Dfoo.jmx.detailed=true" JMX_OPTS="$JMX_OPTS -Djava.rmi.server.host=192.168.9.121" LOG_OPTS="-Dfoo.logging.type=log4j -DLOGDIR=${SERVERDIR}/logs" ASD_OPTS="-Dfoo.conf.file=file:${PROPFILE} -cp ${CLASSPATH} foo" /usr/bin/nohup ${JAVA_EXE} $JAVA_OPTS $JMX_OPTS $LOG_OPTS $ASD_OPTS 1>${SERVERDIR}/service.log 2>&1 &
我可以在本地使用Jconsole进行连接,但是当我从远程主机连接时,出现以下错误(为简洁起见而剪切)
Java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is: java.net.ConnectException: Connection refused: <snip>
因此,尽pipe显式声明声明绑定到192.168.9.121(-Djava.rmi.server.host),JMX仍然绑定到远程系统的回送接口。
我发现唯一的解决方法是修改我的/ etc / hosts来设置系统的FQDN,如下所示:
127.0.0.1 localhost localhost.localdomain 192.168.9.121 my.servers.fqdn.com
基于我见过的每个Linux系统都有指向127.0.0.1的“my.servers.fqdn.com”这个事实,我只能想象改变这个的奇怪问题。
我怎样才能得到远程JMX监控工作没有这个黑客?
系统是CentOS 6,Java 1.6.0_35,防火墙禁用testing。