Java 17 jlink构建应用无法被JConsole连接,需补充哪些模块?
解决JConsole无法连接自定义jlink镜像中Java应用的问题
要让JConsole能正常连接使用jlink构建的自定义运行时镜像中的Java应用,除了你已经添加的java.management和jdk.management,还必须包含以下几个关键模块:
jdk.management.jfr:这个模块正是你缺失的management_ext.dll(Windows平台)的来源,它提供了JMX扩展功能,是本地JConsole与JVM建立连接的必要组件。jdk.internal.jvmstat:负责收集JVM的统计数据,JConsole依赖它来发现和识别本地运行的JVM进程。jdk.attach:提供Attach API,允许JConsole附加到目标JVM进程,这是本地进程连接的核心基础能力。
示例jlink构建命令
将这些模块加入你的jlink命令中,示例如下(Windows平台可调整路径格式):
jlink --module-path "%JAVA_HOME%\jmods";.\your-app-modules \ --add-modules java.base,java.management,jdk.management,jdk.management.jfr,jdk.internal.jvmstat,jdk.attach \ --output custom-runtime
额外注意事项
- 如果你的应用是模块化项目,需要在
module-info.java中声明对这些模块的依赖:module your.app.module { requires java.management; requires jdk.management; requires jdk.management.jfr; requires jdk.internal.jvmstat; requires jdk.attach; } - 构建完成后,检查自定义镜像的
bin目录(Windows下为<custom-runtime>\bin),确认management_ext.dll已存在,这是验证模块是否正确添加的直观方式。 - 启动应用时无需额外JMX参数(本地连接默认启用),但如果需要远程连接,仍需配置
com.sun.management.jmxremote相关参数。
内容的提问来源于stack exchange,提问作者Martin Herbst
相关产品推荐
相关产品推荐

