使用jvisualvm JMX 连接远程服务

22 篇文章 0 订阅

使用 jvisualvm 添加JMX连接远程服务的过程记录。

1. 添加启动参数配置

我的是springboot程序,可以用两种方式:

第一种:在应用的启动脚本上添加

nohup java -Djava.rmi.server.hostname=192.168.1.7 -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmx remote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -jar boot-test.jar &

保存好之后通过脚本重新启动springboot程序即可。

第二种:在 /etc/profile 系统环境变量中添加

sudo vim /etc/profile
export JAVA_OPTS="-Djava.rmi.server.hostname=192.168.1.7 -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmx remote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

保存好之后使用 source /etc/profile 使其生效

然后使用第一种方法,通过变量引用:

nohup java $JAVA_OPTS -jar boot-test.jar &

保存好之后通过脚本重新启动springboot程序即可。

每个参数稍微解释一下

这些参数一定要跟上面一样在同一行哈,我这里是为了方便写注释

-Djava.rmi.server.hostname=192.168.1.7 # 主机地址
-Dcom.sun.management.jmxremote.port=1099 # 远程端口
-Dcom.sun.management.jmx remote.ssl=false # 不使用ssl连接
-Dcom.sun.management.jmxremote.authenticate=false # 不需要鉴权

2. 测试端口

重启springboot程序后你应该可以通过ps看到应用的启动信息,里面包含了刚刚加的那些参数,如果没有,那就说明第一步哪里操作有问题

ps -ef|grep boot-test

然后在window上通过telnet试一下服务器的1099端口能不能通,如果不能通,看一下服务器防火墙,比如iptables是不是没开放1099端口,打开即可。

PS:如果cmd提示没有telnet命令,提供几个方案:
	1 通过Xshell打开一个本地Shell使用;
	2 通过 git bash 命令窗口使用;
	3 通过 Windows PowerShell 使用;
	4 在windows的 控制面板\程序\程序和功能\启用或关闭Windows功能 中找到Telnet Client,勾中,可能需要重启;

3. 启动jvisualvm

然后在windows的java home目录下找到 jvisualvm.exe 并启动,我的目录是 C:\Program Files\Java\jdk1.8.0_161\bin

启动之后找到在远程上右键“添加远程主机”,然后在添加的主机上右键选择“添加 JMX 连接”,如下图:
在这里插入图片描述
在连接的主机名冒号后面填写第一步配置的端口,例如我的是 jmxremote.port=1099,勾选不要求SSL连接,也是因为第一步配置的 remote.ssl=false

4. 遇到的问题

4.1 提示无法连接

在这里插入图片描述
别怪我,我内心也是崩溃的,各种找问题,端口也通了,配置也加了,程序也正常启动了,怎么就连不上呢。。。

后来在一篇文章中看到一个配置,好像比我的多了一个参数com.sun.management.jmxremote.rmi.port=1099
感谢https://blog.csdn.net/surpassno/article/details/60871396这位文章的作者surpassno同学。他这个是在tomcat中配置的,如果你的是tomcat,那有福了,参照他的应该就可以。

-Djava.rmi.server.hostname=192.168.1.7 
-Dcom.sun.management.jmxremote.port=1099 
-Dcom.sun.management.jmxremote.rmi.port=1099 # 就是这行。。。
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false

啥也没多想,加上之后,就成功连上了,撒花✿✿ヽ(°▽°)ノ✿

至于为什么要设置这个,https://alphahinex.github.io/2020/07/26/why-should-set-jmxremote-rmi-port/ 这篇文章中有详细的解释,感兴趣的同学可以去看一下。

4.2 无法连接的另外一种情况

如果服务器有开通公网地址,你无法通过公网ip访问1099,则需要在hosts文件中增加公网ip与机器的配置
sudo vim /etc/hosts

127.0.0.1 localhost
内网ip 主机名

增加一个外网ip与主机名的配置即可,然后通过hostname -i 命令检查,列出了你的外网ip即可。


好了,如果大家还遇到什么问题欢迎交流,有写的不对的地方欢迎指正。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值