Windows下使用JConsole监控WSL2里运行的Java应用

请先参考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)

有两种解决办法:

  1. 如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

  1. 启动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端口>就可以正常连接了。

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

推荐阅读更多精彩内容