JDK-8255256 : gc/g1/ihop/TestIHOPStatic.java failed "assert(!is_null(v)) failed: narrow klass value can never be zero"
  • Type: Bug
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: 16
  • Priority: P3
  • Status: Closed
  • Resolution: External
  • OS: linux
  • CPU: x86_64
  • Submitted: 2020-10-22
  • Updated: 2020-10-29
  • Resolved: 2020-10-29
Related Reports
Relates :  
Description
The following test failed in the JDK16 CI:

gc/g1/ihop/TestIHOPStatic.java

Here's a snippet from the log file:

[1.001s][debug][gc,ergo           ] GC(29) Running G1 Merge Heap Roots using 6 workers for 8 regions
[1.001s][debug][gc,remset         ] GC(29) Visited cards 256 Total dirty 2048 (12.50%) Total old 141312 (0.18%)
# To suppress the following error report, specify this argument
# after -XX: or in .hotspotrc:  SuppressErrorAt=/compressedOops.inline.hpp:100
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (/opt/mach5/mesos/work_dir/slaves/47535081-0322-4d83-bb78-f7e11abb86d0-S27798/frameworks/1735e8a2-a1db-478c-8104-60c8b0af87dd-0196/executors/5e48c4c2-6cf4-4188-9d39-7544879b9c06/runs/44fa89dc-58ae-4045-b8ce-62ef675b9b8c/workspace/open/src/hotspot/share/oops/compressedOops.inline.hpp:100), pid=29823, tid=29848
#  assert(!is_null(v)) failed: narrow klass value can never be zero
#
# JRE version: Java(TM) SE Runtime Environment (16.0+22) (fastdebug build 16-ea+22-1221)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (fastdebug 16-ea+22-1221, mixed mode, sharing, tiered, compressed oops, g1 gc, linux-amd64)
# Problematic frame:
# V  [libjvm.so+0x8750ec][1.003s][debug][gc,alloc,region   ] GC(29) Survivor GC Alloc Region: 0 DUMMY : alloc failed
[thread 29846 also had an error]
[1.003s][debug][gc,alloc,region   ] GC(29) Survivor GC Alloc Region: 0 DUMMY : alloc failed
[thread 29845 also had an error][1.003s][debug][gc,alloc,region   ] GC(29) Survivor GC Alloc Region: 0 DUMMY : alloc failed

[1.003s][debug][gc,alloc,region   ] GC(29) Survivor GC Alloc Region: 0 DUMMY : alloc failed
[1.003s][debug][gc,alloc,region   ] GC(29) Survivor GC Alloc Region: 0 DUMMY : retiring
[1.003s][debug][gc,alloc,region   ] GC(29) Survivor GC Alloc Region: 0 DUMMY : retired
[1.003s][debug][gc,alloc,region   ] GC(29) Survivor GC Alloc Region: 0 DUMMY : attempting region allocation
[1.003s][debug][gc,alloc,region   ] GC(29) Survivor GC Alloc Region: 0 DUMMY : update
[1.003s][debug][gc,alloc,region   ] GC(29) Survivor GC Alloc Region: 1 129:(S)[0x00000000e8100000,0x00000000e8102720,0x00000000e8200000] : updated
[1.003s][debug][gc,alloc,region   ] GC(29) Survivor GC Alloc Region: 1 129:(S)[0x00000000e8100000,0x00000000e8102720,0x00000000e8200000] : region allocation successful
[thread 29849 also had an error]
[thread 29843 also had an error]
[thread 29847 also had an error]
  CompressedKlassPointers::decode_not_null(unsigned int)+0x5c
#
# Core dump will be written. Default location: Core dumps may be processed with "/opt/core.sh %p" (or dumping to /opt/mach5/mesos/work_dir/slaves/47535081-0322-4d83-bb78-f7e11abb86d0-S27635/frameworks/1735e8a2-a1db-478c-8104-60c8b0af87dd-0196/executors/50630bf7-3287-429d-bfe2-1857f63991df/runs/58098c31-a531-487f-b925-3d5b9ba79cbb/testoutput/test-support/jtreg_open_test_hotspot_jtreg_tier1_gc_1/scratch/0/core.29823)
#
# An error report file with more information is saved as:
# /opt/mach5/mesos/work_dir/slaves/47535081-0322-4d83-bb78-f7e11abb86d0-S27635/frameworks/1735e8a2-a1db-478c-8104-60c8b0af87dd-0196/executors/50630bf7-3287-429d-bfe2-1857f63991df/runs/58098c31-a531-487f-b925-3d5b9ba79cbb/testoutput/test-support/jtreg_open_test_hotspot_jtreg_tier1_gc_1/scratch/0/hs_err_pid29823.log
#
# If you would like to submit a bug report, please visit:
#   https://bugreport.java.com/bugreport/crash.jsp
#

[2020-10-22T07:59:51.882924413Z] Waiting for completion for process 29823
[2020-10-22T07:59:51.883141800Z] Waiting for completion finished for process 29823
----------System.err:(13/798)----------

Here's the crashing thread's stack:

---------------  T H R E A D  ---------------

Current thread (0x00007f1ef400cbf0):  GCTaskThread "GC Thread#6" [stack: 0x00007f1edb6f2000,0x00007f1edb7f2000] [id=29848]

Stack: [0x00007f1edb6f2000,0x00007f1edb7f2000],  sp=0x00007f1edb7f0890,  free space=1018k
Native frames: (J=compiled Java code, A=aot compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x8750ec]  CompressedKlassPointers::decode_not_null(unsigned int)+0x5c
V  [libjvm.so+0xc9d338]  G1ParScanThreadState::do_copy_to_survivor_space(G1HeapRegionAttr, oop, markWord)+0x398
V  [libjvm.so+0xca2978]  void G1ParScanThreadState::do_oop_evac<narrowOop>(narrowOop*)+0xd8
V  [libjvm.so+0xc9e263]  G1ParScanThreadState::trim_queue_to_threshold(unsigned int)+0x343
V  [libjvm.so+0xcb7d4a]  G1ParScanThreadState::trim_queue_partially()+0x3a
V  [libjvm.so+0xcc162f]  G1ScanHRForRegionClosure::scan_heap_roots(HeapRegion*)+0x89f
V  [libjvm.so+0xcb3cad]  G1RemSet::scan_heap_roots(G1ParScanThreadState*, unsigned int, G1GCPhaseTimes::GCParPhases, G1GCPhaseTimes::GCParPhases, bool)+0x37d
V  [libjvm.so+0xc12bab]  G1EvacuateRegionsTask::scan_roots(G1ParScanThreadState*, unsigned int)+0x4b
V  [libjvm.so+0xc137e6]  G1EvacuateRegionsBaseTask::work(unsigned int)+0x56
V  [libjvm.so+0x19d2a74]  GangWorker::run_task(WorkData)+0x84
V  [libjvm.so+0x19d2bb4]  GangWorker::loop()+0x44
V  [libjvm.so+0x186d830]  Thread::call_run()+0x100
V  [libjvm.so+0x155b886]  thread_native_entry(Thread*)+0x116


The task description for this job set is:

Run test open/test/hotspot/jtreg/:tier1_gc_1 with linux-x64-debug

so this looks like an ordinary test run with no special options.
Comments
Closing for the same reason as JDK-8255087: the host is likely problematic.
29-10-2020

[~iklam] is investigating other strange crashes on this machine in JDK-8255087.
23-10-2020

(I wanted to check if this is related to CDS or not. Probably not) From core file: oop G1ParScanThreadState::do_copy_to_survivor_space(G1HeapRegionAttr const region_attr, oop const old, markWord const old_mark) { ... // Get the klass once. We'll need it again later, and this avoids // re-decoding when it's compressed. Klass* klass = old->klass(); <<<<<< crash here (gdb) p (int*)old $3 = (int *) 0xe87bc4a0 (gdb) x/8gx 0xe87bc4a0 0xe87bc4a0: 0x0000000000000000 0x0000000000000000 0xe87bc4b0: 0x0000000000000000 0x0000000000000000 0xe87bc4c0: 0x0000000000000000 0x0000000000000000 0xe87bc4d0: 0x0000000000000000 0x0000000000000000 CDS archived heap is mapped at these locations ffe00000-ffe83000 rw-p 00cf0000 08:03 406132993 classes.jsa ffe83000-fff00000 rw-p 00000000 00:00 0 fff00000-fff8a000 rw-p 00c66000 08:03 406132993 classes.jsa
22-10-2020