What actions are allowed in an JVMTI ResourceExhausted event handler?
David Holmes
david.holmes at oracle.com
Wed Nov 14 05:58:31 UTC 2018
On 14/11/2018 3:37 pm, Thomas Stüfe wrote:
> On Wed, Nov 14, 2018, 06:32 David Holmes <david.holmes at oracle.com
> <mailto:david.holmes at oracle.com> wrote:
>
> Hi Thomas,
>
> On 14/11/2018 6:50 am, Thomas Stüfe wrote:
> > Hi all,
> >
> > We have a client using CloudFoundry and its "jvmkill" agent. That
> is a
> > tiny JVMTI agent (see https://github.com/cloudfoundry/jvmkill) which
> > subscribes to the JVMTI ResourceExhausted Event. In the handler it
> > then does call JVMTI FollowReferences() to produce a heap histogram.
> >
> > The thing is, at our client we seem to run out of Metaspace in a
> > compiler thread. That thread normally would swallow the Metaspace OOM
> > and just bailout from the compilation. But as part of the metaspace
> > OOME handling the ResourceExhausted event gets posted, the handler
> > then uses JVMTI FollowReferences() and attempts to print out the heap
> > histogram, then runs into a guarantee since the compiler thread
> cannot
> > call java methods.
> >
> > My question is: are there any limitations about what one can do
> inside
> > a ResourceExhausted event handler?
>
> Not specified no. But the reality of JVM TI is that you can't
> anticipate
> every execution context and there are times when there are implicit
> constraints imposed by the implementation.
>
> In this case I think we have a mismatch between the fact we post the
> event from the compiler thread, but that a compiler thread is not a
> true
> "Java thread" and so can not execute arbitrary JNI or JVM TI code,
> or in
> particular can not lead to executing Java code. I think we should
> not be
> posting the event from the compiler thread in this case.
>
> Cheers,
> David
>
>
> Hi David,
>
> Yes I thought so too. I'll prepare a fix.
My thought on the fix is that we need to check if
Thread::current()->can_call_java(). And that should probably be inside
the JvmtiExport::should_post_xxx implementation.
Cheers,
David
> Thanks, Thomas
>
>
> > I checked the
> https://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html
> > documentation, but I cannot find any mentioning of limitations in
> that
> > case.
> >
> > Thanks and Best Regards, Thomas
> >
>
More information about the serviceability-dev
mailing list