WildFly通过JMX对接Zabbix监控时遇JVM启动错误求助
问题解决:Java 11下WildFly启动失败(-Xbootclasspath不支持)
根因分析
-Xbootclasspath参数在Java 9及以上版本已被移除,而你使用的是OpenJDK 11,因此启动时触发JVM创建失败的错误。同时你的standalone.conf中存在一处拼写错误,也会影响日志管理器的加载。
修复步骤
1. 修正拼写错误
将JBOSS_MODULES_SYSTEM_PKGS中的org.joss.logmanager改为org.jboss.logmanager(注意是jboss而非joss)。
2. 移除废弃参数
删除包含-Xbootclasspath的整行配置,该参数在Java 11中已不再支持。
3. 添加Java 11兼容参数
为了让JBoss Log Manager在Java 11中正常工作,需要添加一系列模块导出和开放的参数,以允许访问必要的内部API。
修正后的standalone.conf核心配置
if [ "x$JBOSS_MODULES_SYSTEM_PKGS" = "x" ]; then JBOSS_MODULES_SYSTEM_PKGS="org.jboss.bytemani,org.jboss.logmanager" fi # Uncomment the following line to prevent manipulation of JVM options # by shell scripts. # #PRESERVE_JAVA_OPTS=true # # Specify options to pass to the Java VM. # if [ "x$JAVA_OPTS" = "x" ]; then JAVA_OPTS="-Xms2G -Xmx2G -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=1G -Djava.net.preferIPv4Stack=true" # 添加Java 11兼容参数 JAVA_OPTS="$JAVA_OPTS --add-modules=java.se" JAVA_OPTS="$JAVA_OPTS --add-exports=java.base/sun.nio.ch=ALL-UNNAMED" JAVA_OPTS="$JAVA_OPTS --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED" JAVA_OPTS="$JAVA_OPTS --add-exports=jdk.unsupported/sun.reflect=ALL-UNNAMED" JAVA_OPTS="$JAVA_OPTS --add-opens=java.base/java.lang=ALL-UNNAMED" JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true" # JMX监控配置保持不变 JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" # 保留日志管理器配置 JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager" else echo "JAVA_OPTS already set in environment; overriding default settings with values: $JAVA_OPTS" fi
后续验证
- 重启WildFly,确认启动成功且无JVM创建错误
- 测试Zabbix是否能通过端口9010正常连接WildFly的JMX服务
内容的提问来源于stack exchange,提问作者user9187036
相关产品推荐
相关产品推荐

