You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在JBoss EAP 7.1上配置DX APM失败,抛出java.lang.ClassNotFoundException

JBoss EAP 7.1.6集成DX APM启动失败:NoClassDefFoundError: org/jboss/logmanager/Level

问题场景

在Red Hat Enterprise Linux 8.9上配置JBoss EAP 7.1.6.GA集成DX APM时,启动服务器抛出类找不到异常,启动脚本的JAVA_OPTS配置如下:

JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
JAVA_OPTS="$JAVA_OPTS -javaagent:/apps/apm/wily/Agent.jar"
JAVA_OPTS="$JAVA_OPTS -Dcom.wily.introscope.agentProfile=/apps/apm/wily/releases/24.3/core/config/IntroscopeAgent.profile"
JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:${JBOSS_HOME}/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-2.0.7.Final-redhat-1.jar"

抛出的异常堆栈:

Exception in thread "main" java.lang.NoClassDefFoundError: org/jboss/logmanager/Level
at java.lang.Class.forName0(Native Method)
          at java.lang.Class.forName(Class.java:348)
          at org.jboss.modules.Module.run(Module.java:329)
          at org.jboss.modules.Main.main(Main.java:525)
Caused by: java.lang.ClassNotFoundException: org.jboss.logmanager.Level
          at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
          at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
          at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
          at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
          at org.jboss.modules.JDKSpecific.getSystemClass(JDKSpecific.java:183)
          at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:397)
          at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)

问题原因

  1. 手动添加的-Xbootclasspath/p破坏了JBoss EAP原有模块类加载逻辑,仅指定jboss-logmanager主jar但未包含其依赖组件,导致类加载不完整。
  2. DX APM Agent的加载顺序晚于LogManager配置,Agent类加载器干扰了LogManager的初始化流程。
  3. JBOSS_MODULES_SYSTEM_PKGS可能未包含org.jboss.logmanager,导致系统类加载器无法正确识别该包。

解决方案

1. 移除手动指定的Xbootclasspath配置

JBoss EAP 7.x通过模块系统自动管理logmanager的加载,手动指定bootclasspath会引发类加载冲突,直接删除该行:

# 删除以下配置行
# JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:${JBOSS_HOME}/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-2.0.7.Final-redhat-1.jar"

2. 调整Agent加载顺序

将DX APM Agent的配置移到-Djava.util.logging.manager之前,确保Agent初始化不影响LogManager的加载:

# 先加载Agent,再配置LogManager
JAVA_OPTS="$JAVA_OPTS -javaagent:/apps/apm/wily/Agent.jar"
JAVA_OPTS="$JAVA_OPTS -Dcom.wily.introscope.agentProfile=/apps/apm/wily/releases/24.3/core/config/IntroscopeAgent.profile"
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager"

3. 确保系统包包含LogManager

检查并更新JBOSS_MODULES_SYSTEM_PKGS,将org.jboss.logmanager加入系统包列表:

JBOSS_MODULES_SYSTEM_PKGS="org.jboss.logmanager,${JBOSS_MODULES_SYSTEM_PKGS}"
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"

4. 完整配置示例

调整后的启动脚本JAVA_OPTS配置:

JBOSS_MODULES_SYSTEM_PKGS="org.jboss.logmanager,${JBOSS_MODULES_SYSTEM_PKGS}"
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"
JAVA_OPTS="$JAVA_OPTS -javaagent:/apps/apm/wily/Agent.jar"
JAVA_OPTS="$JAVA_OPTS -Dcom.wily.introscope.agentProfile=/apps/apm/wily/releases/24.3/core/config/IntroscopeAgent.profile"
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager"

5. 清理缓存后重启

删除JBOSS_HOME下的临时缓存目录,避免旧类加载信息干扰:

rm -rf ${JBOSS_HOME}/tmp/*
rm -rf ${JBOSS_HOME}/data/*

执行启动脚本重新启动JBoss EAP。

内容的提问来源于stack exchange,提问作者fanatik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 02:24:53