jar包启动方式连接
jar包名为:store.jar,普通的启动命令java -jar store.jar,如果后台启动需要nohup命令,或者指定jvm空间需加上-Xmx之类的命令,这里以最普通的启动命令举例,需再加上以下命令启动:
java ‐Dcom.sun.management.jmxremote.port=8093 ‐Djava.rmi.server.hostname=xxx.xxx.xx.xx ‐Dcom.sun.management.jmxremote.ssl=false ‐Dcom.sun.management.jmxremote.authenticate=false ‐jar store.jar
hostname需改成自己服务器的ip或者域名,在jvisualvm里面连接的时候主机名就是这个hostname,端口自定义一个,上面的命令是未设置密码,也可以设置密码连接。
踩过的坑
网上看的博客,几乎都是讲的这样,然后说再关闭防火墙就可以连接了,确实如果是linux虚拟机的话直接就可以连接了。
但是我的服务器是阿里云服务器,服务器的防火墙是可以关闭,但是还需要去阿里云控制台配置安全组规则,也不可能直接阿里云的安全组直接关闭了,我就只在控制台里打开了8093这个端口,但是我用jvasulvm还是连接不上,试了很多次还是没找到问题。
然后jps命令和netstat -plunt | grep java命令看了服务端口情况

这里可以看到store.jar这个服务是开启的,pid是2227,然后我又输入netstat -plunt | grep java命令

这里可以看到pid为2227的服务,有多个端口,8083是服务自身的端口号,8093是为jvisualvm连接开启的端口号,但是还是另外两个端口号43898、37011是什么,但是可以肯定的是这两个端口号也是属于这个store这个服务的。
抱着试一下心态,我又在阿里云控制台里面打开了这两个端口号
然后,就连上了…
确实如其他博客说的,关闭防火墙之后就可以连接了

然后,我又重启一遍这个服务,看看那两个端口会不会变化,如果变化的话,每次重启服务都需要配置一遍安全组规则吗


果然他变了,后面也有看到其他博主说,jmx方式启动后,会有两个随机的端口的,在jvisualvm连接8093的时候也会连接这两个端口
解决办法
在上面的命令中再加上-Dcom.sun.management.jmxremote.rmi.port=8093命令,RMI端口号可以和上面的端口一致,JMX在远程连接时,会随机开启一个RMI端口作为连接的数据端口,这里相当于我们自己指定了,全部的命令如下
-Dcom.sun.management.jmxremote.port=8093 -Dcom.sun.management.jmxremote.rmi.port=8093 -Djava.rmi.server.hostname=xxx.xxx.xx.xx -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
测试一下,现在的store进程如下,jvisualvm是可以连接的,pid和服务器上的pid也是一致的


重启之后,store进程如下
pid变成了15779,随机端口号也改变了,再试试jvisualvm连接

可以看到连接后pid是15779,连接成功,这样后面就不用每次开发端口号了
本文分享了使用JMX进行远程监控的配置经验,详细介绍了如何解决因端口随机分配导致的连接问题,并提供了可行的解决方案。
402

被折叠的 条评论
为什么被折叠?



