Java VisualVM无法连接远程JMX的问题

问题描述

今天在用Oracle JDK自带的Java VisualVM监视远程虚拟机上的Web服务时发现不能正常连接的问题,远程服务启动参数是这样的:

java \
-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=1099 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-jar service.jar

看着没有什么问题,但是用VisualVM连接就会报出
无法使用service:jmx:rmi:///jndi/rmi://xxx.xxx.xxx.xxx:1099/jmxrmi连接到xxx.xxx.xxx.xxx:1099

问题分析

因为我当前的电脑同时开启了IPv4和IPv6双栈,所以造成JVM会去优先使用IPv6协议发起远程连接,但对端主机对于IPv6并没有提供支持(如没有监听IPv6端口),导致无法连接。

解决方法

在启动VisualVM时候在参数上附加-J-Djava.net.preferIPv4Stack=true,强制使用IPv4协议发起连接。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。