记一个JConsole远程连接异常的问题(java版本1.8)
这里只说明不配置密码的方法
局域网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