Integrated: 8264634: CollectCLDClosure collects duplicated CLDs when dumping dynamic archive
Yi Yang
yyang at openjdk.java.net
Tue Apr 6 03:01:23 UTC 2021
On Fri, 2 Apr 2021 08:15:38 GMT, Yi Yang <yyang at openjdk.org> wrote:
> #
> # A fatal error has been detected by the Java Runtime Environment:
> #
> # Internal Error (/home/qingfeng.yy/openjdk16_so_warning/jdk/src/hotspot/share/classfile/classLoaderData.cpp:316), pid=68929, tid=68930
> # assert(_keep_alive > 0) failed: Invalid keep alive decrement count
> #
> # JRE version: OpenJDK Runtime Environment (17.0) (slowdebug build 17-internal+0-adhoc.qingfengyy.jdk)
> # Java VM: OpenJDK 64-Bit Server VM (slowdebug 17-internal+0-adhoc.qingfengyy.jdk, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64)
> # Problematic frame:
> # V [libjvm.so+0x781087] ClassLoaderData::dec_keep_alive()+0x31
>
> Stack: [0x00007f1593072000,0x00007f1593173000], sp=0x00007f1593171c00, free space=1023k
> Native frames: (J=compiled Java code, A=aot compiled Java code, j=interpreted, Vv=VM code, C=native code)
> V [libjvm.so+0x781087] ClassLoaderData::dec_keep_alive()+0x31
> V [libjvm.so+0xef19e7] MetaspaceShared::link_and_cleanup_shared_classes(Thread*)+0x181
> V [libjvm.so+0x1260834] JavaThread::invoke_shutdown_hooks()+0x46
> V [libjvm.so+0x12609e5] Threads::destroy_vm()+0xe7
> V [libjvm.so+0xbb40ec] jni_DestroyJavaVM_inner+0x91
> V [libjvm.so+0xbb4147] jni_DestroyJavaVM+0x1f
> C [libjli.so+0x4b4f] JavaMain+0xc61
> C [libjli.so+0xad93] ThreadJavaMain+0x27
> We observed VM crashed when dumping dynamic archive in a simple springboot application(See detailed content on JBS attachment). I did some investigations. In rare case, both of the following paths may be stepped on when dumping dynamic archive:
>
> 1. SIGINT
> at java.lang.Shutdown.beforeHalt(java.base at 17-internal/Native Method)
> at java.lang.Shutdown.exit(java.base at 17-internal/Shutdown.java:172)
> - locked <0x00000007fef02040> (a java.lang.Class for java.lang.Shutdown)
> at java.lang.Terminator$1.handle(java.base at 17-internal/Terminator.java:51)
> at jdk.internal.misc.Signal$1.run(java.base at 17-internal/Signal.java:219)
> at java.lang.Thread.run(java.base at 17-internal/Thread.java:831)
>
> 2. Normal Exit
> JavaThread::invoke_shutdown_hooks()+0x46
> Threads::destroy_vm()+0xe7
> jni_DestroyJavaVM_inner+0x91
> jni_DestroyJavaVM+0x1f
> JavaMain+0xc61
> ThreadJavaMain+0x27
>
> They would call MetaspaceShared::link_and_cleanup_shared_classes, and CollectCLDClosure collects duplicated CLDs into _loaded_cld, _keep_alive is decrementing twice, causing a negative _keep_alive.
>
> Testing(linux_x64):
> [+] test/hotspot/jtreg/runtime/cds
> [+] test/hotspot/jtreg/gc
This pull request has now been integrated.
Changeset: 54b4070d
Author: Yi Yang <yyang at openjdk.org>
Committer: Yumin Qi <minqi at openjdk.org>
URL: https://git.openjdk.java.net/jdk/commit/54b4070d
Stats: 27 lines in 1 file changed: 14 ins; 7 del; 6 mod
8264634: CollectCLDClosure collects duplicated CLDs when dumping dynamic archive
Reviewed-by: minqi, iklam
-------------
PR: https://git.openjdk.java.net/jdk/pull/3320
More information about the hotspot-runtime-dev
mailing list