Failed assert during VM_HeapWalkOperation

Rodrigo Bruno rodrigo.bruno at inf.ethz.ch
Thu Mar 26 22:17:56 UTC 2020


Dear Roman,

I am using jdk 11.0.7 (checked out ~12 hours ago). I am pasting below part
of the dump file. Sorry for the verbosity.

Looking at https://bugs.openjdk.java.net/browse/JDK-8237632, it seems
indeed to be the same issue. It this fix already in a public repo so that I
can test?

thanks!,
rodrigo

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error
(/home/rbruno/mercurial/shenandoah/src/hotspot/share/gc/shenandoah/shenandoahForwarding.inline.hpp:47),
pid=18485, tid=18490
#  Error: Shenandoah assert_correct failed; Forwardee must point to a heap
address

Referenced from:
  no interior location recorded (probably a plain heap scan, or detached
oop)

Object:
  0x00000000c0004808 - klass 0x00000001000020f0 java.lang.Class
    not allocated after mark start
        marked
    not in collection set
  mark: marked(0x0000000000000003)
  region: |    0|R  |BTE     c0000000,     c0080000,     c0080000|TAMS
c0080000|U   512K|T   512K|G     0B|S     0B|L     0B|CP   0|SN
 1,        1,        0,        0

Forwardee:
  0x0000000000000000 - safe print, no details


#
# JRE version: OpenJDK Runtime Environment (11.0.7) (slowdebug build
11.0.7-internal+0-adhoc.rbruno.shenandoah)
# Java VM: OpenJDK 64-Bit Server VM (slowdebug
11.0.7-internal+0-adhoc.rbruno.shenandoah, mixed mode, tiered, compressed
oops, shenandoah gc, linux-amd64)
# No core dump will be written. Core dumps have been disabled. To enable
core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
#

---------------  S U M M A R Y ------------

Command Line: -XX:+UseShenandoahGC -XX:-UseBiasedLocking -Xlog:gc=trace
-Xms1g -Xmx1g -Djava.library.path=. -agentpath:./libnaos.so ObjectCounter 5
4000000

Host: ganymede, Intel(R) Xeon(R) CPU E3-1225 v6 @ 3.30GHz, 4 cores, 31G,
Debian GNU/Linux 9 (stretch)
Time: Thu Mar 26 21:58:00 2020 CET elapsed time: 78 seconds (0d 0h 1m 18s)

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

Current thread (0x00007fd1202df890):  VMThread "VM Thread" [stack:
0x00007fd102c22000,0x00007fd102d22000] [id=18490]

Stack: [0x00007fd102c22000,0x00007fd102d22000],  sp=0x00007fd102d1dd30,
 free space=1007k
Native frames: (J=compiled Java code, A=aot compiled Java code,
j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x13a357e]  VMError::report_and_die(int, char const*, char
const*, __va_list_tag*, Thread*, unsigned char*, void*, void*, char const*,
int, unsigned long)+0x7e2
V  [libjvm.so+0x13a2d39]  VMError::report_and_die(Thread*, void*, char
const*, int, char const*, char const*, __va_list_tag*)+0x57
V  [libjvm.so+0x8e874e]  report_vm_error(char const*, int, char const*,
char const*, ...)+0x152
V  [libjvm.so+0x8e85f9]  report_vm_error(char const*, int, char const*)+0x39
V  [libjvm.so+0x1185eb6]
 ShenandoahAsserts::print_failure(ShenandoahAsserts::SafeLevel, oopDesc*,
void*, oopDesc*, char const*, char const*, char const*, int)+0x39c
V  [libjvm.so+0x118611c]  ShenandoahAsserts::assert_correct(void*,
oopDesc*, char const*, int)+0x1c2
V  [libjvm.so+0x10047fb]  ShenandoahForwarding::get_forwardee(oopDesc*)+0x29
V  [libjvm.so+0x100521e]
 ShenandoahBarrierSet::resolve_forwarded_not_null(oopDesc*)+0x18
V  [libjvm.so+0x11876d7]
 ShenandoahBarrierSet::load_reference_barrier_impl(oopDesc*)+0xad
V  [libjvm.so+0x11874af]
 ShenandoahBarrierSet::load_reference_barrier_not_null(oopDesc*)+0x55
V  [libjvm.so+0x7571e7]  oopDesc*
ShenandoahBarrierSet::AccessBarrier<1097844ul,
ShenandoahBarrierSet>::oop_load_not_in_heap<oopDesc*>(oopDesc**)+0x3f
V  [libjvm.so+0x756ea4]
 AccessInternal::PostRuntimeDispatch<ShenandoahBarrierSet::AccessBarrier<1097844ul,
ShenandoahBarrierSet>, (AccessInternal::BarrierType)2,
1097844ul>::oop_access_barrier(void*)+0x18
V  [libjvm.so+0x756aba]  AccessInternal::RuntimeDispatch<1097812ul,
oopDesc*, (AccessInternal::BarrierType)2>::load(void*)+0x1c
V  [libjvm.so+0x756a14]  EnableIf<!HasDecorator<1097812ul, 4096ul>::value,
oopDesc*>::type AccessInternal::PreRuntimeDispatch::load<1097812ul,
oopDesc*>(void*)+0x37
V  [libjvm.so+0x75691d]  oopDesc*
AccessInternal::load_reduce_types<1097812ul, oopDesc*>(oopDesc**)+0x18
V  [libjvm.so+0x756816]  oopDesc* AccessInternal::load<1048580ul, oopDesc*,
oopDesc*>(oopDesc**)+0x25
V  [libjvm.so+0x756452]  AccessInternal::OopLoadProxy<oopDesc*,
1048576ul>::operator oopDesc*()+0x1c
V  [libjvm.so+0x7bb4c7]  OopHandle::resolve() const+0x45
V  [libjvm.so+0xe32dd0]  Klass::java_mirror() const+0x1c
V  [libjvm.so+0xe2e264]
 VM_HeapWalkOperation::iterate_over_class(oopDesc*)+0x8c
V  [libjvm.so+0xe2f6b3]  VM_HeapWalkOperation::visit(oopDesc*)+0xd1
V  [libjvm.so+0xe2988b]  VM_HeapWalkOperation::doit()+0x1d7
V  [libjvm.so+0x13a6394]  VM_Operation::evaluate()+0xde
V  [libjvm.so+0x13ea6b4]  VMThread::evaluate_operation(VM_Operation*)+0x62
V  [libjvm.so+0x13ead61]  VMThread::loop()+0x521
V  [libjvm.so+0x13ea22f]  VMThread::run()+0x111
V  [libjvm.so+0x130e2d3]  Thread::call_run()+0xc9
V  [libjvm.so+0x10515ba]  thread_native_entry(Thread*)+0x1a2

VM_Operation (0x00007fd12a5094d0): HeapWalkOperation, mode: safepoint,
requested by thread 0x00007fd120074120

Roman Kennke <rkennke at redhat.com> escreveu no dia quinta, 26/03/2020 à(s)
22:40:

> Hello Rodrigo,
>
> > Dear Shenandoah dev list,
> >
> > my name is Rodrigo, I am an ETH postdoc researcher, and my group
> currently
> > has a project that involves using Shenandoah and tracing objects upon
> > request by Java code (yes, many people will think this is a terrible
> > idea... :-), I can explain if someone is interested...).
> >
> > We are using a slightly modified copy of the VM_HeapWalkOperation VM
> > operation to trace objects starting for a particular initial object.
> > However we started noticing failed asserts as soon as we introduced more
> > load into the system (more allocations, leading to more GC effort).
> >
> > After some debugging, it turns out to be a load barrier check that fails
> > during the VM_HeapWalkOperation because it i) sets the mark bits and ii)
> > tries to resolve oops (triggering the barrier). For some reason, the gc
> > state indicates that object headers should have the forwardee pointer in
> > place and thus it fails. I saw that there is already an exception for
> this
> > particular VM op but it does not cover this path.
> >
> > This failed assert can be reproduced using an unmodified JDK. I just
> tested
> > it today by downloading [1], building, and creating a simple test which
> > basically calls a JNI function that calls JVMTI FollowReferences. I can
> > provide the sources to reproduce the failed assert. If I
> > use -XX:ShenandoahGCMode=passive, no barriers are enabled and everything
> > works fine. Dump file is attached.
> >
> > I think this might be a bug. Please let me know if you need any further
> > information/help.
>
> This does indeed sound like a bug that we fixed recently:
>
>
> https://mail.openjdk.java.net/pipermail/shenandoah-dev/2020-March/thread.html
>
> https://bugs.openjdk.java.net/browse/JDK-8237632
>
>  and
>
> https://bugs.openjdk.java.net/browse/JDK-8237396
>
> Can you tell us which exact version you are using? The attachment has
> been stripped by the mailing list.
>
> Thank you,
> Roman
>
>

-- 
rodrigo-bruno.github.io


More information about the shenandoah-dev mailing list