构建带JMX支持的ARM Gnueabi OpenJDK11 JRE及启动报错解决
解决ARM Gnueabi平台OpenJDK 11 JMX/JStatd启动错误及最小模块集方案
核心解决方法
之前用minimal模式构建OpenJDK 11时,该模式会裁剪掉JMX相关的底层VM支持,导致-Dcom.sun.management参数无法被识别。将构建配置切换为client模式后,问题即可解决。
错误原因说明
minimal构建模式为极致精简,会禁用非核心的管理扩展(包括com.sun.management相关功能)——哪怕通过jlink打包了所有模块,VM层面的支持已经被移除,因此会抛出-Dcom.sun.management is not supported in this VM.错误。
JMX/JStatd最小依赖模块集
针对嵌入式设备内存有限的需求,以下是支持JMX和JStatd的最小模块集合:
java.base:Java核心基础模块,必须包含java.management:JMX核心API模块java.management.rmi:JMX的RMI远程通信支持java.rmi:RMI基础功能模块jdk.jstatd:JStatd工具依赖模块jdk.management.agent:JMX远程代理模块java.logging:可选,但建议包含,便于排查运行日志jdk.attach:部分JMX功能依赖的附加工具支持
对应的jlink构建命令:
sudo qemu-arm -L /usr/arm-linux-gnueabi jdk/bin/jlink --no-header-files --no-man-pages --module-path jmods --compress=2 --add-modules java.base,java.management,java.management.rmi,java.rmi,jdk.jstatd,jdk.management.agent,java.logging,jdk.attach --output jre_jmx_minimal
启动验证
使用上述最小化JRE启动程序时,添加JMX参数即可正常运行:
java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8855 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false YourMainClass
内容的提问来源于stack exchange,提问作者Sbon
相关产品推荐
相关产品推荐

