Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

graalvm编译报错,和使用Unsafe方法有关 #386

Closed
fliaping opened this issue May 31, 2022 · 5 comments
Closed

graalvm编译报错,和使用Unsafe方法有关 #386

fliaping opened this issue May 31, 2022 · 5 comments
Labels
bug Something isn't working
Milestone

Comments

@fliaping
Copy link

问题描述

graalvm编译native-image报错,框架使用quarkus

2 fatal errors detected:
Fatal error: com.oracle.graal.pointsto.util.AnalysisError$ParsingError: Error encountered while parsing com.alibaba.fastjson2.util.UnsafeUtils.getStringCoder(java.lang.String) 
Parsing context:
   at com.alibaba.fastjson2.util.UnsafeUtils.getStringCoder(UnsafeUtils.java:64)
   at com.alibaba.fastjson2.JSONReader.of(JSONReader.java:1899)
   at com.alibaba.fastjson.JSON.parseObject(JSON.java:85)
   at com.alibaba.fastjson.JSON.parseObject(JSON.java:77)
   at com.alibaba.ascp.rosetta.chain.server.service.TraceQueryService$2.load(TraceQueryService.java:312)
   at com.alibaba.ascp.rosetta.chain.server.service.TraceQueryService$2.load(TraceQueryService.java:306)
   at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3533)
   at com.google.common.cache.LocalCache$Segment.loadAsync(LocalCache.java:2291)
   at com.google.common.cache.LocalCache$Segment.refresh(LocalCache.java:2364)
   at com.google.common.cache.LocalCache$Segment.scheduleRefresh(LocalCache.java:2342)
   at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2076)
   at com.google.common.cache.LocalCache.get(LocalCache.java:3961)
   at java.lang.Module.isReflectivelyExportedOrOpen(Module.java:713)
   at java.lang.Module.implIsExportedOrOpen(Module.java:634)
   at java.lang.Module.isExported(Module.java:530)
   at jdk.internal.reflect.Reflection.verifyModuleAccess(Reflection.java:244)
   at jdk.internal.reflect.Reflection.verifyMemberAccess(Reflection.java:141)
   at java.util.ServiceLoader.checkCaller(ServiceLoader.java:572)
   at java.util.ServiceLoader.<init>(ServiceLoader.java:507)
   at java.util.ServiceLoader.load(ServiceLoader.java:1653)
   at javax.enterprise.inject.spi.SecurityActions.lambda$loadService$0(SecurityActions.java:39)
   at javax.enterprise.inject.spi.SecurityActions$$Lambda$786/0x00000007c23a8000.run(Unknown Source)
   at com.oracle.svm.core.jdk.Target_java_security_AccessController.doPrivileged(SecuritySubstitutions.java:89)
   at javax.enterprise.inject.spi.SecurityActions.loadService(SecurityActions.java:38)
   at javax.enterprise.inject.spi.CDI.findAllProviders(CDI.java:118)
   at javax.enterprise.inject.spi.CDI.getCDIProvider(CDI.java:82)
   at javax.enterprise.inject.spi.CDI.current(CDI.java:64)
   at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:106)
   at io.quarkus.runtime.Quarkus.run(Quarkus.java:67)
   at io.quarkus.runtime.Quarkus.run(Quarkus.java:41)
   at com.alibaba.ascp.rosetta.chain.server.Application.main(Application.java:14)
   at com.oracle.svm.core.JavaMainWrapper.runCore(JavaMainWrapper.java:150)
   at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:186)
   at com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(generated:0)

        at com.oracle.graal.pointsto.util.AnalysisError.parsingError(AnalysisError.java:141)
        at com.oracle.graal.pointsto.flow.MethodTypeFlow.createTypeFlow(MethodTypeFlow.java:315)
        at com.oracle.graal.pointsto.flow.MethodTypeFlow.ensureTypeFlowCreated(MethodTypeFlow.java:286)
        at com.oracle.graal.pointsto.flow.MethodTypeFlow.addContext(MethodTypeFlow.java:107)
        at com.oracle.graal.pointsto.flow.StaticInvokeTypeFlow.update(InvokeTypeFlow.java:428)
        at com.oracle.graal.pointsto.PointsToAnalysis$2.run(PointsToAnalysis.java:598)
        at com.oracle.graal.pointsto.util.CompletionExecutor.executeCommand(CompletionExecutor.java:195)
        at com.oracle.graal.pointsto.util.CompletionExecutor.lambda$executeService$0(CompletionExecutor.java:179)
        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: com.oracle.svm.hosted.analysis.flow.SVMMethodTypeFlowBuilder$UnsafeOffsetError: Field AnalysisField<UnsafeUtils.STRING_CODER_OFFSET accessed: false reads: true written: true> is used as an offset in an unsafe operation, but no value recomputation found.
 Wrapped field: HotSpotResolvedJavaFieldImpl<com.alibaba.fastjson2.util.UnsafeUtils.STRING_CODER_OFFSET long:128>
 Location: at com.alibaba.fastjson2.util.UnsafeUtils.getStringCoder(UnsafeUtils.java:81) [bci: 67]
        at com.oracle.svm.hosted.analysis.flow.SVMMethodTypeFlowBuilder$UnsafeOffsetError.report(SVMMethodTypeFlowBuilder.java:113)
        at com.oracle.svm.hosted.analysis.flow.SVMMethodTypeFlowBuilder.checkUnsafeOffset(SVMMethodTypeFlowBuilder.java:158)
        at com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder$NodeIterator.node(MethodTypeFlowBuilder.java:1002)
        at jdk.internal.vm.compiler/org.graalvm.compiler.phases.graph.PostOrderNodeIterator.apply(PostOrderNodeIterator.java:106)
        at com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.apply(MethodTypeFlowBuilder.java:442)
        at com.oracle.graal.pointsto.flow.MethodTypeFlow.createTypeFlow(MethodTypeFlow.java:297)
        ... 12 more
Fatal error: com.oracle.graal.pointsto.util.AnalysisError$ParsingError: Error encountered while parsing com.alibaba.fastjson2.util.UnsafeUtils.getStringValue(java.lang.String) 
Parsing context:
   at com.alibaba.fastjson2.util.UnsafeUtils.getStringValue(UnsafeUtils.java:85)
   at com.alibaba.fastjson2.JSONReader.of(JSONReader.java:1901)
   at com.alibaba.fastjson.JSON.parseObject(JSON.java:85)
   at com.alibaba.fastjson.JSON.parseObject(JSON.java:77)
   at com.alibaba.ascp.rosetta.chain.server.service.TraceQueryService$2.load(TraceQueryService.java:312)
   at com.alibaba.ascp.rosetta.chain.server.service.TraceQueryService$2.load(TraceQueryService.java:306)
   at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3533)
   at com.google.common.cache.LocalCache$Segment.loadAsync(LocalCache.java:2291)
   at com.google.common.cache.LocalCache$Segment.refresh(LocalCache.java:2364)
   at com.google.common.cache.LocalCache$Segment.scheduleRefresh(LocalCache.java:2342)
   at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2076)
   at com.google.common.cache.LocalCache.get(LocalCache.java:3961)
   at java.lang.Module.isReflectivelyExportedOrOpen(Module.java:713)
   at java.lang.Module.implIsExportedOrOpen(Module.java:634)
   at java.lang.Module.isExported(Module.java:530)
   at jdk.internal.reflect.Reflection.verifyModuleAccess(Reflection.java:244)
   at jdk.internal.reflect.Reflection.verifyMemberAccess(Reflection.java:141)
   at java.util.ServiceLoader.checkCaller(ServiceLoader.java:572)
   at java.util.ServiceLoader.<init>(ServiceLoader.java:507)
   at java.util.ServiceLoader.load(ServiceLoader.java:1653)
   at javax.enterprise.inject.spi.SecurityActions.lambda$loadService$0(SecurityActions.java:39)
   at javax.enterprise.inject.spi.SecurityActions$$Lambda$786/0x00000007c23a8000.run(Unknown Source)
   at com.oracle.svm.core.jdk.Target_java_security_AccessController.doPrivileged(SecuritySubstitutions.java:89)
   at javax.enterprise.inject.spi.SecurityActions.loadService(SecurityActions.java:38)
   at javax.enterprise.inject.spi.CDI.findAllProviders(CDI.java:118)
   at javax.enterprise.inject.spi.CDI.getCDIProvider(CDI.java:82)
   at javax.enterprise.inject.spi.CDI.current(CDI.java:64)
   at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:106)
   at io.quarkus.runtime.Quarkus.run(Quarkus.java:67)
   at io.quarkus.runtime.Quarkus.run(Quarkus.java:41)
   at com.alibaba.ascp.rosetta.chain.server.Application.main(Application.java:14)
   at com.oracle.svm.core.JavaMainWrapper.runCore(JavaMainWrapper.java:150)
   at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:186)
   at com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(generated:0)

        at com.oracle.graal.pointsto.util.AnalysisError.parsingError(AnalysisError.java:141)
        at com.oracle.graal.pointsto.flow.MethodTypeFlow.createTypeFlow(MethodTypeFlow.java:315)
        at com.oracle.graal.pointsto.flow.MethodTypeFlow.ensureTypeFlowCreated(MethodTypeFlow.java:286)
        at com.oracle.graal.pointsto.flow.MethodTypeFlow.addContext(MethodTypeFlow.java:107)
        at com.oracle.graal.pointsto.flow.StaticInvokeTypeFlow.update(InvokeTypeFlow.java:428)
        at com.oracle.graal.pointsto.PointsToAnalysis$2.run(PointsToAnalysis.java:598)
        at com.oracle.graal.pointsto.util.CompletionExecutor.executeCommand(CompletionExecutor.java:195)
        at com.oracle.graal.pointsto.util.CompletionExecutor.lambda$executeService$0(CompletionExecutor.java:179)
        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: com.oracle.svm.hosted.analysis.flow.SVMMethodTypeFlowBuilder$UnsafeOffsetError: Field AnalysisField<UnsafeUtils.STRING_VALUE_OFFSET accessed: false reads: true written: true> is used as an offset in an unsafe operation, but no value recomputation found.
 Wrapped field: HotSpotResolvedJavaFieldImpl<com.alibaba.fastjson2.util.UnsafeUtils.STRING_VALUE_OFFSET long:136>
 Location: at com.alibaba.fastjson2.util.UnsafeUtils.getStringValue(UnsafeUtils.java:98) [bci: 57]
        at com.oracle.svm.hosted.analysis.flow.SVMMethodTypeFlowBuilder$UnsafeOffsetError.report(SVMMethodTypeFlowBuilder.java:113)
        at com.oracle.svm.hosted.analysis.flow.SVMMethodTypeFlowBuilder.checkUnsafeOffset(SVMMethodTypeFlowBuilder.java:158)
        at com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder$NodeIterator.node(MethodTypeFlowBuilder.java:1002)
        at jdk.internal.vm.compiler/org.graalvm.compiler.phases.graph.PostOrderNodeIterator.apply(PostOrderNodeIterator.java:106)
        at com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.apply(MethodTypeFlowBuilder.java:442)
        at com.oracle.graal.pointsto.flow.MethodTypeFlow.createTypeFlow(MethodTypeFlow.java:297)
        ... 12 more

环境信息

请填写以下信息:

  • OS信息: MacOS intel
  • JDK信息: graalvm 22.0 jdk17
  • 版本信息:fastjson2 2.0.5.graal

重现步骤

./mvnw package -Dnative -Dmaven.test.skip=true

@fliaping fliaping added the bug Something isn't working label May 31, 2022
@wenshao
Copy link
Member

wenshao commented May 31, 2022

只验证在22.1版本,你更换graalvm版本试试看,我没计划支持graavm 22.0

@fliaping
Copy link
Author

fliaping commented May 31, 2022

@wenshao 换了graalvm-ce-java17-22.1.0 报错如下

Error: Field AnalysisField<UnsafeUtils.STRING_CODER_OFFSET accessed: false reads: true written: true folded: false> is used as an offset in an unsafe operation, but no value recomputation found.
 Wrapped field: HotSpotResolvedJavaFieldImpl<com.alibaba.fastjson2.util.UnsafeUtils.STRING_CODER_OFFSET long:128>
 Location: at com.alibaba.fastjson2.util.UnsafeUtils.getStringCoder(UnsafeUtils.java:81) [bci: 67]
com.oracle.svm.hosted.analysis.flow.SVMMethodTypeFlowBuilder$UnsafeOffsetError: Field AnalysisField<UnsafeUtils.STRING_CODER_OFFSET accessed: false reads: true written: true folded: false> is used as an offset in an unsafe operation, but no value recomputation found.
 Wrapped field: HotSpotResolvedJavaFieldImpl<com.alibaba.fastjson2.util.UnsafeUtils.STRING_CODER_OFFSET long:128>
 Location: at com.alibaba.fastjson2.util.UnsafeUtils.getStringCoder(UnsafeUtils.java:81) [bci: 67]
        at com.oracle.svm.hosted.analysis.flow.SVMMethodTypeFlowBuilder$UnsafeOffsetError.report(SVMMethodTypeFlowBuilder.java:113)
        at com.oracle.svm.hosted.analysis.flow.SVMMethodTypeFlowBuilder.checkUnsafeOffset(SVMMethodTypeFlowBuilder.java:158)
        at com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder$NodeIterator.node(MethodTypeFlowBuilder.java:1000)
        at jdk.internal.vm.compiler/org.graalvm.compiler.phases.graph.PostOrderNodeIterator.apply(PostOrderNodeIterator.java:106)
        at com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.apply(MethodTypeFlowBuilder.java:444)
        at com.oracle.graal.pointsto.flow.MethodTypeFlow.createTypeFlow(MethodTypeFlow.java:301)
        at com.oracle.graal.pointsto.flow.MethodTypeFlow.ensureTypeFlowCreated(MethodTypeFlow.java:290)
        at com.oracle.graal.pointsto.flow.MethodTypeFlow.addContext(MethodTypeFlow.java:111)
        at com.oracle.graal.pointsto.flow.StaticInvokeTypeFlow.update(InvokeTypeFlow.java:388)
        at com.oracle.graal.pointsto.PointsToAnalysis$1.run(PointsToAnalysis.java:631)
        at com.oracle.graal.pointsto.util.CompletionExecutor.executeCommand(CompletionExecutor.java:193)
        at 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)
Error: Field AnalysisField<UnsafeUtils.STRING_VALUE_OFFSET accessed: false reads: true written: true folded: false> is used as an offset in an unsafe operation, but no value recomputation found.
 Wrapped field: HotSpotResolvedJavaFieldImpl<com.alibaba.fastjson2.util.UnsafeUtils.STRING_VALUE_OFFSET long:136>
 Location: at com.alibaba.fastjson2.util.UnsafeUtils.getStringValue(UnsafeUtils.java:98) [bci: 57]
com.oracle.svm.hosted.analysis.flow.SVMMethodTypeFlowBuilder$UnsafeOffsetError: Field AnalysisField<UnsafeUtils.STRING_VALUE_OFFSET accessed: false reads: true written: true folded: false> is used as an offset in an unsafe operation, but no value recomputation found.
 Wrapped field: HotSpotResolvedJavaFieldImpl<com.alibaba.fastjson2.util.UnsafeUtils.STRING_VALUE_OFFSET long:136>
 Location: at com.alibaba.fastjson2.util.UnsafeUtils.getStringValue(UnsafeUtils.java:98) [bci: 57]
        at com.oracle.svm.hosted.analysis.flow.SVMMethodTypeFlowBuilder$UnsafeOffsetError.report(SVMMethodTypeFlowBuilder.java:113)
        at com.oracle.svm.hosted.analysis.flow.SVMMethodTypeFlowBuilder.checkUnsafeOffset(SVMMethodTypeFlowBuilder.java:158)
        at com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder$NodeIterator.node(MethodTypeFlowBuilder.java:1000)
        at jdk.internal.vm.compiler/org.graalvm.compiler.phases.graph.PostOrderNodeIterator.apply(PostOrderNodeIterator.java:106)
        at com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.apply(MethodTypeFlowBuilder.java:444)
        at com.oracle.graal.pointsto.flow.MethodTypeFlow.createTypeFlow(MethodTypeFlow.java:301)
        at com.oracle.graal.pointsto.flow.MethodTypeFlow.ensureTypeFlowCreated(MethodTypeFlow.java:290)
        at com.oracle.graal.pointsto.flow.MethodTypeFlow.addContext(MethodTypeFlow.java:111)
        at com.oracle.graal.pointsto.flow.StaticInvokeTypeFlow.update(InvokeTypeFlow.java:388)
        at com.oracle.graal.pointsto.PointsToAnalysis$1.run(PointsToAnalysis.java:631)
        at com.oracle.graal.pointsto.util.CompletionExecutor.executeCommand(CompletionExecutor.java:193)
        at 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)

@wenshao wenshao added this to the 2.0.6 milestone May 31, 2022
@wenshao
Copy link
Member

wenshao commented May 31, 2022

https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/fastjson2/fastjson2/2.0.6.graal-SNAPSHOT/
用2.0.6.graal-SNAPSHOT 帮忙验证下,我本地试过是好的

@fliaping
Copy link
Author

fliaping commented Jun 1, 2022

@wenshao 另一个问题,这个地方的单量用lazyload的方式
image

Caused by: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Detected an instance of Random/SplittableRandom class in the image heap. Instances created during image generation have cached seed values and don't behave as expected.  Object has been initialized by the com.alibaba.fastjson2.JSONPath$RandomIndexSegment class initializer with a trace: 
        at java.util.Random.<init>(Random.java:109)
        at com.alibaba.fastjson2.JSONPath$RandomIndexSegment.<init>(JSONPath.java:4674)
        at com.alibaba.fastjson2.JSONPath$RandomIndexSegment.<clinit>(JSONPath.java:4672)

wenshao added a commit that referenced this issue Jun 1, 2022
@wenshao
Copy link
Member

wenshao commented Jun 4, 2022

https://github.com/alibaba/fastjson2/releases/tag/2.0.6
问题已经修复,请用新版本

@wenshao wenshao closed this as completed Jun 4, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants