远程 JMX 连接发送到本地主机

远程 JMX 连接发送到本地主机

我正在尝试在 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>

因此,尽管明确声明要绑定到 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,防火墙已禁用,以供测试。

答案1

我确实遇到了这个问题...我使用了 tomcat 9.0.19 和 centos7 服务器...最后,我在其中添加了以下属性path/to/tomcat/bin/setenv.sh

CATALINA_OPTS="$CATALINA_OPTS 
-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=1099 
-Dcom.sun.management.jmxremote.rmi.port=1099 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-Djava.rmi.server.hostname=192.168.1.20 
-Djmx.rmi.registry.port=1099 
-Djmx.rmi.port=1099 
" 

export CATALINA_OPTS

重启你的 tomcat...

192.168.1.20 是我的本地服务器,1099 是我的 jmx 端口。这个配置对我有用。

相关内容