jvisualvm连接远程服务器

本文分享了使用JMX进行远程监控的配置经验,详细介绍了如何解决因端口随机分配导致的连接问题,并提供了可行的解决方案。

jar包启动方式连接

jar包名为:store.jar,普通的启动命令java -jar store.jar,如果后台启动需要nohup命令,或者指定jvm空间需加上-Xmx之类的命令,这里以最普通的启动命令举例,需再加上以下命令启动:

 java ‐Dcom.sun.management.jmxremote.port=8093Djava.rmi.server.hostname=xxx.xxx.xx.xx ‐Dcom.sun.management.jmxremote.ssl=falseDcom.sun.management.jmxremote.authenticate=false ‐jar store.jar

hostname需改成自己服务器的ip或者域名,在jvisualvm里面连接的时候主机名就是这个hostname,端口自定义一个,上面的命令是未设置密码,也可以设置密码连接。

踩过的坑

网上看的博客,几乎都是讲的这样,然后说再关闭防火墙就可以连接了,确实如果是linux虚拟机的话直接就可以连接了。
但是我的服务器是阿里云服务器,服务器的防火墙是可以关闭,但是还需要去阿里云控制台配置安全组规则,也不可能直接阿里云的安全组直接关闭了,我就只在控制台里打开了8093这个端口,但是我用jvasulvm还是连接不上,试了很多次还是没找到问题。

然后jps命令和netstat -plunt | grep java命令看了服务端口情况
jps命令返回
这里可以看到store.jar这个服务是开启的,pid是2227,然后我又输入netstat -plunt | grep java命令
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,连接成功,这样后面就不用每次开发端口号了

### 配置 JVisualVM 连接并监控远程服务器性能 #### 启动远程 JVM 的 JMX 服务 为了使本地的 JVisualVM 能够连接远程 Linux 服务器上的 Java 应用程序,需确保该应用程序已通过特定参数启动以开启 JMX 监控功能。具体来说,在启动命令中加入如下 JVM 参数来配置 JMX: ```bash -Dcom.sun.management.jmxremote.port=<port> -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=<server_ip_address> ``` 其中 `<port>` 是指定用于监听来自客户端请求的 RMI 注册表端口号;`<server_ip_address>` 则应替换为实际服务器 IP 地址[^5]。 #### 安装必要的插件 在本地计算机上打开 `jvisualvm.exe` 文件(位于 JDK 安装路径下的 bin 文件夹内),首次运行时建议安装一些额外的功能模块以便更好地进行性能诊断工作。点击菜单栏中的 "Tools" -> "Plugins" 来访问可用更新列表,并勾选所需项完成下载与激活过程[^4]。 #### 设置防火墙规则允许外部访问 考虑到安全性因素,默认情况下大多数生产环境都会设置较为严格的网络防护策略。因此还需要确认目标机器所在子网内的安全组/iptables 是否开放了上述自定义端口供外界调用。可以执行以下指令临时解除限制(仅适用于测试阶段): ```bash sudo iptables -A INPUT -p tcp --dport <port> -j ACCEPT ``` 同样地,请记得将占位符部分替换成之前设定好的数值[^1]。 #### 创建反向 SSH 隧道(可选) 如果由于 NAT 映射等原因无法直接暴露真实地址给公网,则可通过构建一条稳定的隧道实现间接通信目的。假设本机拥有公钥认证权限的话,那么只需输入下面这条语句即可达成效果: ```bash ssh -L <local_port>:localhost:<remote_jmx_port> user@your_remote_host & ``` 这里需要注意的是,`<local_port>` 和 `<remote_jmx_port>` 均代表同一逻辑概念的不同表现形式而已——即用来转发数据包的目标位置[^3]。 #### 添加新连接JVisualVM 最后一步就是在图形界面里新增一个条目指向远端实例啦!切换回 Windows 平台后找到左侧边栏里的 “Remote” 分类标签页,右键单击空白处选取 “Add Remote Host...”,接着按照提示填写相关信息直至成功加载出对应 PID 号码为止[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值