请先参考WSL2与Windows间的网络互访获取正确的WSL2的IP Address: <wsl-ip>
。本文提到的Java应用被部署在Ubuntu 20.04.3 LTS系统上。
在JConsole通过<wsl-ip>
:<JMX端口>
连接WSL2里的Java应用时会遇到以下错误而不能成功连接:
其根本原因是Bug ID: JDK-6209663 jconsole won't connect to remote JVM on Linux (java.com)
有两种解决办法:
- 如Sun Bug中所描述的方法:
通过修改/etc/hosts
文件使hostname -i
返回<wsl-ip>
。
默认情况下hostname -i可能返回127.0.1.1
,编辑/etc/hosts
文件,将127.0.1.1
替换成<wsl-ip>
就可以了。
如:
127.0.1.1 MyMateBookXPro.localdomain
替换成:
<wsl-ip>
MyMateBookXPro.localdomain
- 启动Java应用时绑定JMX Server的hostname (推荐,-Djava.rmi.server.hostname参数非常重要,一定要有)
要解决这个问题一个办法是在启动Java应用时通过-Djava.rmi.server.hostname参数绑定JMX Server的hostname为<wsl-ip>
,下面是一个Java应用的启动参数示例:
$ java -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=9998 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=172.27.170.146 -jar yourJavaApp.jar
上面命令会绑定JMX server的hostname为172.27.170.146,端口为9998.
使用方法1或2,在Windows下的JConsole里通过<wsl-ip>
:<JMX端口>
就可以正常连接了。