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

Quarkus构建GraalVM原生镜像失败:Unsupported字段错误排查求助

Quarkus GraalVM原生构建失败排查方案

问题背景

使用Quarkus 2.16.4.Final进行GraalVM原生构建时失败,堆栈跟踪未指向业务代码,核心错误为Unsupported field jdk.internal.loader.NativeLibraries.loadedLibraryNames is reachable。

完整错误日志

[1/7] Initializing...                                                                                   (62.4s @ 0.45GB)
 Version info: 'GraalVM 22.3.1.0-Final Java 17 Mandrel Distribution'
 Java version info: '17.0.6+10'
 C compiler: gcc (redhat, x86_64, 8.5.0)
 Garbage collector: Serial GC
 9 user-specific feature(s)
 - com.oracle.svm.thirdparty.gson.GsonFeature
 - io.quarkus.caffeine.runtime.graal.CacheConstructorsFeature
 - io.quarkus.hibernate.orm.runtime.graal.DisableLoggingFeature: Disables INFO logging during the analysis phase for the [org.hibernate.Version, org.hibernate.annotations.common.Version, org.hibernate.dialect.Dialect] categories
 - io.quarkus.hibernate.validator.runtime.DisableLoggingFeature: Disables INFO logging during the analysis phase for the [org.hibernate.validator.internal.util.Version] categories
 - io.quarkus.runner.Feature: Auto-generated class by Quarkus from the existing extensions
 - io.quarkus.runtime.graal.DisableLoggingFeature: Disables INFO logging during the analysis phase for the [org.jboss.threads] categories
 - io.quarkus.runtime.graal.ResourcesFeature: Register each line in META-INF/quarkus-native-resources.txt as a resource on Substrate VM
 - org.hibernate.graalvm.internal.GraalVMStaticFeature: Hibernate ORM's static reflection registrations for GraalVM
 - org.hibernate.graalvm.internal.QueryParsingSupport: Hibernate ORM's support for HQL Parser in GraalVM
[2/7] Performing analysis...  []                                                                       (100.8s @ 1.65GB)
  23,468 (94.51%) of 24,830 classes reachable
  34,685 (64.54%) of 53,744 fields reachable
 101,866 (83.65%) of 121,783 methods reachable
   1,097 classes,     0 fields, and     0 methods registered for reflection

2 fatal errors detected:
Fatal error: com.oracle.graal.pointsto.util.AnalysisError$ParsingError: Error encountered while parsing jdk.internal.loader.NativeLibraries$Unloader.run() 
Parsing context:
   at jdk.internal.loader.NativeLibraries$Unloader.run(NativeLibraries.java:436)
   at jdk.internal.ref.CleanerImpl$PhantomCleanableRef.performCleanup(CleanerImpl.java:178)
   at jdk.internal.ref.PhantomCleanable.clean(PhantomCleanable.java:133)
   at java.util.zip.Inflater$InflaterZStreamRef.clean(Inflater.java:758)
   at java.util.zip.Inflater.end(Inflater.java:704)
   at java.util.zip.InflaterInputStream.close(InflaterInputStream.java:230)
   at java.io.FileDescriptor.closeAll(FileDescriptor.java:345)
   at java.io.FileInputStream.close(FileInputStream.java:457)
   at sun.nio.cs.StreamDecoder.implClose(StreamDecoder.java:366)
   at sun.nio.cs.StreamDecoder.close(StreamDecoder.java:204)
   at java.io.InputStreamReader.close(InputStreamReader.java:192)
   at java.io.BufferedReader.close(BufferedReader.java:525)
   at com.oracle.svm.core.containers.CgroupUtil.readStringValue(CgroupUtil.java:61)
   at com.oracle.svm.core.containers.CgroupSubsystemController.getStringValue(CgroupSubsystemController.java:66)
   at com.oracle.svm.core.containers.CgroupSubsystemController.getLongValue(CgroupSubsystemController.java:125)
   at com.oracle.svm.core.containers.cgroupv1.CgroupV1Subsystem.getLongValue(CgroupV1Subsystem.java:269)

    at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.AnalysisError.parsingError(AnalysisError.java:153)
    at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlow.createFlowsGraph(MethodTypeFlow.java:104)
    at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlow.ensureFlowsGraphCreated(MethodTypeFlow.java:83)
    at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlow.getOrCreateMethodFlowsGraph(MethodTypeFlow.java:65)
    at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.typestate.DefaultVirtualInvokeTypeFlow.onObservedUpdate(DefaultVirtualInvokeTypeFlow.java:109)
    at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.TypeFlow.update(TypeFlow.java:562)
    at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.PointsToAnalysis$1.run(PointsToAnalysis.java:488)
    at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.CompletionExecutor.executeCommand(CompletionExecutor.java:193)
    at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.CompletionExecutor.lambda$executeService$0(CompletionExecutor.java:177)
    at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1395)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
Caused by: org.graalvm.compiler.java.BytecodeParser$BytecodeParserError: com.oracle.svm.hosted.substitute.DeletedElementException: Unsupported field jdk.internal.loader.NativeLibraries.loadedLibraryNames is reachable
To diagnose the issue, you can add the option --report-unsupported-elements-at-runtime. The unsupported element is then reported at run time when it is accessed the first time.
    at parsing jdk.internal.loader.NativeLibraries$Unloader.run(NativeLibraries.java:436)
    at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.throwParserError(BytecodeParser.java:2518)
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.phases.SharedGraphBuilderPhase$SharedBytecodeParser.throwParserError(SharedGraphBuilderPhase.java:110)
    at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.iterateBytecodesForBlock(BytecodeParser.java:3393)
    at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.handleBytecodeBlock(BytecodeParser.java:3345)
    at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.processBlock(BytecodeParser.java:3190)
    at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.build(BytecodeParser.java:1138)
    at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.buildRootMethod(BytecodeParser.java:1030)
    at jdk.internal.vm.compiler/org.graalvm.compiler.java.GraphBuilderPhase$Instance.run(GraphBuilderPhase.java:97)
    at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.phases.SharedGraphBuilderPhase.run(SharedGraphBuilderPhase.java:84)
    at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.run(Phase.java:49)
    at jdk.internal.vm.compiler/org.graalvm.compiler.phases.BasePhase.apply(BasePhase.java:446)
    at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.apply(Phase.java:42)
    at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.apply(Phase.java:38)
    at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.AnalysisParsedGraph.parseBytecode(AnalysisParsedGraph.java:135)
    at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisMethod.ensureGraphParsed(AnalysisMethod.java:685)
    at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.parse(MethodTypeFlowBuilder.java:171)
    at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.apply(MethodTypeFlowBuilder.java:349)
    at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlow.createFlowsGraph(MethodTypeFlow.java:93)
    ... 13 more
Caused by: com.oracle.svm.hosted.substitute.DeletedElementException: Unsupported field jdk.internal.loader.NativeLibraries.loadedLibraryNames is reachable

排查方向

  • 先尝试临时调试参数:添加--report-unsupported-elements-at-runtime到原生构建命令中,该参数会将编译时的错误延迟至运行时触发,能帮你定位具体触发问题的代码路径。
  • 验证环境版本兼容性:
    • 确认Quarkus 2.16.4.Final与Mandrel 22.3.1.0-Final的版本匹配,参考对应版本的发布说明确认兼容性。
    • 若在容器内构建,切换到宿主机环境重试,排除Cgroup版本或容器资源限制导致的问题(错误堆栈中出现了Cgroup相关代码调用)。
  • 排查扩展与依赖:
    • 执行quarkus extension list查看项目使用的所有Quarkus扩展,重点排查涉及JNI、原生库加载的第三方扩展,确认其是否支持原生构建。
    • 逐步禁用非核心扩展(如先禁用Hibernate相关扩展),缩小问题范围,定位是哪个扩展引发的兼容问题。
  • 收集详细编译日志:
    • 构建时添加-X参数开启详细日志,或设置quarkus.native.debug.enabled=true,获取分析阶段的完整日志,寻找字段被引用的更多线索。
    • 检查target/quarkus-native-image-source-output/META-INF/native-image/下的反射配置文件,确认是否存在错误的反射注册导致GraalVM误判字段可达性。
  • 尝试版本升级:
    • 升级Quarkus到2.16.x系列的最新补丁版本,或在业务允许的情况下升级到Quarkus 3.x,新版本通常修复了更多GraalVM兼容问题。
    • 升级Mandrel到对应Quarkus版本推荐的最新版本(如Mandrel 22.3.2及以上)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:44:53