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

AWS/EKS中Java应用FrameworkFactory版本加载异常排查求助

问题描述

我们正在将Kubernetes部署迁移至AWS EKS,其中一个集群运行正常,另一个集群启动时无法正确解析org.osgi.framework.launch.FrameworkFactory的版本:

  • 正常集群从org.eclipse.osgi-3.9.1.jar加载该类,能正确解压并生成lib/配置文件及工作区文件夹
  • 异常集群则从org.osgi.core-4.3.1.jar加载,无法生成配置与工作区,导致主线程启动即报错

我们使用第三方JAR和Eclipse配置,通过Maven构建Docker镜像部署,需要故障原因分析思路。


类加载对比
正常集群 - [Loaded org.osgi.framework.launch.FrameworkFactory from file:/usr/share/pm.health.rating.engine/lib/org.eclipse.osgi-3.9.1.jar]
vs
异常集群 - [Loaded org.osgi.framework.launch.FrameworkFactory from file:/usr/share/pm.health.rating.engine/lib/org.osgi.core-4.3.1.jar]

POM依赖配置
<dependencies>
    <dependency>
        <groupId>org.apache.avro</groupId>
        <artifactId>avro</artifactId>
        <version>${avro.version}</version>
    </dependency>
    <dependency>
        <groupId>net.logstash.log4j</groupId>
        <artifactId>jsonevent-layout</artifactId>
        <version>1.7</version>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-s3</artifactId>
        <version>${aws.version}</version>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-sts</artifactId>
        <version>${aws.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-server</artifactId>
        <version>${jetty.version}</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-servlet</artifactId>
        <version>${jetty.version}</version>
    </dependency>
    <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java</artifactId>
        <version>${protobuf.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.osgi -->
    <dependency>
        <groupId>org.eclipse.osgi</groupId>
        <artifactId>org.eclipse.osgi</artifactId>
        <version>3.9.1</version>
    </dependency>
    <dependency>
        <groupId>com.vendor.pm</groupId>
        <artifactId>pmrs</artifactId>
        <version>${pmrs.version}</version>
    </dependency>
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>19.0</version>
    </dependency>
    <!-- Eos Runtime Services dependencies -->
    <dependency>
        <groupId>com.vendor.pm</groupId>
        <artifactId>eos-rs</artifactId>
        <version>4.2.9.4</version>
        <exclusions>
            <exclusion>
                <groupId>com.vendor.pm</groupId>
                <artifactId>pmrs</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>net.sourceforge.jexcelapi</groupId>
        <artifactId>jxl</artifactId>
        <version>2.6.12</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>1.9.0</version>
    </dependency>
    <dependency>
        <groupId>com.rackspace.apache</groupId>
        <artifactId>xerces2-xsd11</artifactId>
        <version>2.11.2</version>
    </dependency>
    <!-- ADDED TO AVOID THE SAX PARSER WARNINGS -->
    <dependency>
        <groupId>xalan</groupId>
        <artifactId>xalan</artifactId>
        <version>2.7.1</version>
        <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.15</version>
        <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.15</version>
        <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.xml.parsers/jaxp-api -->
    <dependency>
        <groupId>javax.xml.parsers</groupId>
        <artifactId>jaxp-api</artifactId>
        <version>1.4.5</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.vendor.eos.groupref</groupId>
        <artifactId>com.fja.eos.groupref.formula.lib</artifactId>
        <version>1.0.0.202005041335</version>
    </dependency>
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>2.7.0</version>
    </dependency>
    <dependency>
        <groupId>io.confluent</groupId>
        <artifactId>kafka-avro-serializer</artifactId>
        <version>5.5.1</version>
    </dependency>
</dependencies>

运行环境信息

openjdk version "1.8.0_402" OpenJDK Runtime Environment (build 1.8.0_402-b06) OpenJDK 64-Bit Server VM (build 25.402-b06, mixed mode)

NAME="Red Hat Enterprise Linux" VERSION="9.3 (Plow)" ID="rhel" ID_LIKE="fedora" VERSION_ID="9.3" PLATFORM_ID="platform:el9" PRETTY_NAME="Red Hat Enterprise Linux 9.3 (Plow)" ANSI_COLOR="0;31" LOGO="fedora-logo-icon" CPE_NAME="cpe:/o:redhat:enterprise_linux:9::baseos" HOME_URL="https://www.redhat.com/" DOCUMENTATION_URL="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9" BUG_REPORT_URL="https://bugzilla.redhat.com/"

REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 9" REDHAT_BUGZILLA_PRODUCT_VERSION=9.3 REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux" REDHAT_SUPPORT_PRODUCT_VERSION="9.3" 5.15.145 x86_64 Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Address sizes: 48 bits physical, 48 bits virtual Byte Order: Little Endian CPU(s): 8 On-line CPU(s) list: 0-7 Vendor ID: AuthenticAMD Model name: AMD EPYC 7R13 Processor CPU family: 25 Model: 1 Thread(s) per core: 2 Core(s) per socket: 4 Socket(s): 1 Stepping: 1


故障原因分析思路
  • Maven依赖冲突排查

    • 执行mvn dependency:tree分析依赖树,定位org.osgi.core-4.3.1.jar的引入来源(大概率是第三方依赖如eos-rs或pmrs的传递依赖)
    • 检查Maven依赖调解规则的生效差异:正常集群可能因依赖声明顺序、路径优先级优先加载了org.eclipse.osgi-3.9.1,异常集群的依赖树可能发生了变化
    • 在引入冲突依赖的第三方包中添加显式排除规则,确保仅保留org.eclipse.osgi-3.9.1
  • Docker镜像一致性验证

    • 确认两个集群使用的镜像哈希值、标签完全一致,排除镜像版本差异
    • 检查镜像构建时的Maven配置(settings.xml)是否一致,避免仓库源差异导致拉取不同依赖
    • 尝试添加--no-cache参数重新构建镜像,排除构建缓存带来的依赖残留问题
  • 类加载与JVM配置检查

    • 对比两个集群的JVM启动参数,查看CLASSPATH中JAR包的顺序是否存在差异,异常集群可能将org.osgi.core-4.3.1.jar放在了优先级更高的位置
    • 检查Eclipse OSGI启动配置文件(如config.ini)是否一致,确认是否指定了框架实现类,避免JVM自动选择错误的FrameworkFactory实现
  • EKS集群环境差异排查

    • 检查Pod的存储卷挂载权限与可写性,异常集群可能因无法写入配置/工作区目录导致框架初始化失败(需注意这可能是类加载错误的后续影响)
    • 对比Pod的环境变量,确认是否存在影响OSGI初始化的系统属性配置差异

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:42:32