On 14/11/2018 3:37 pm, Thomas Stüfe wrote:
On Wed, Nov 14, 2018, 06:32 David Holmes <david.hol...@oracle.com <mailto:david.hol...@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
     >

Reply via email to