首页 > 技术文章 > 记一个JConsole远程连接异常的问题(java版本1.8)

oldboyooxx 2020-04-15 14:57 原文

这里只说明不配置密码的方法

 

局域网liunx中tomcat - catalina.sh配置文件

JAVA_OPTS="-server -Xms1024m -Xmx1024m -Xss256k -XX:PermSize=128m -XX:MaxPermSize=256m"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=19999"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"

 

死活连接不上,网上大多数都是说是hosts配置文件的问题,我这边尝试了各种方法

网上查的资料全部都是说hosts文件的问题

我这边获取

hostname -i

得到的就是内网ip(192.168.2.13)

如果不是的朋友可以用以下代码临时修改(重启失效)

hostname 192.168.2.13

但是我还是连接不上,又尝试在jvm启动的时候配置,在catalina.sh中增加配置

JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.2.13"

 

 

但是还是不行,最后在茫茫文章中看到有人指定了另一个端口

-Dcom.sun.management.jmxremote.rmi.port=19999

终于成功了!

查了相关资料,应该是java7之后做出了修改(以下文字来源于网络)

 

不过在我的工作做,此时发现仍然不能再远程访问,查询了相关资料后,有可能是防火墙的原因屏蔽了相关接口。在Java启动时,JMX会绑定一个接口,RMI也会绑定一个接口,在复杂网络环境下,有可能你通过打开防火墙允许了JMX端口的通过,但是由于没有放行RMI,远程连接也是会失败的。

这是因为JMX在远程连接时,会随机开启一个RMI端口作为连接的数据端口,很有可能这个端口会被防火墙给阻止,以至于连接超时失败。好在在Java7u25版本后可-Dcom.sun.management.jmxremote.rmi.port=端口号来定死这个端口,好消息是,你可以将这个端口和jmx.port的端口设置成一个端口,这样防火墙策略就只需要同行一个端口就可以了。



 

 

 

 

参考资料:

https://www.jianshu.com/p/414647c1179e

https://www.jianshu.com/p/b7790c9eabff

https://www.linuxidc.com/Linux/2015-02/113420.htm

 

推荐阅读