ZGC Allocation stall metrics via MXBean

Per Liden per.liden at oracle.com
Fri Oct 25 12:14:20 UTC 2019


On 10/24/19 7:34 PM, Connaughton, Niall wrote:
> Thanks Per, that's helpful to understand.
> 
> On exposing allocation stall information via an MXBean, it would be super nice if it was exposed via a bean that implements NotificationEmitter. We're currently using notifications from the GarbageCollectorMXBean to subscribe to GC events and record data on pause duration, cause, etc, as well as what in-flight operations may have been impacted by the pause. If we could use a similar approach to watch for allocation stalls, instead of polling for stalls via the ThreadMXBean, that would be awesome.

Good to know, thanks.

/Per


> 
> On 10/24/19, 00:47, "Per Liden" <per.liden at oracle.com> wrote:
> 
>      Hi,
>      
>      When allocating a small object (object size <= 256K), if the thread
>      already has a TLAB it will continue to allocate from it without being
>      stalled. If the TLAB is exhausted, the thread will try to allocate a new
>      TLAB from a CPU-local ZPage (this can be seen as a "CPU-LAB" for
>      allocating TLABS), again without being stalled. Only if that CPU-local
>      ZPage is also exhausted will the thread try to allocate a new ZPage, in
>      which case it will be stalled if we're currently out of memory.
>      
>      The allocation path is slightly different when allocating medium objects
>      (object size <= 4M). In this cases, the first attempt is to allocate the
>      object into a global/shared medium ZPage. If that page is exhausted, it
>      will try to allocate a new medium ZPage, and is subject to allocation
>      stall if we're out of memory.
>      
>      For large objects (object size > 4M), we always allocate a new large
>      ZPage, so we'll have an allocation stall if we're out of memory.
>      
>      In summary, if we're out of memory, a thread might still be able to
>      allocate obejcts without being stalled. If circumstances are right.
>      
>      Exposing allocation stall information via an MXBean might be useful. We
>      certainly have the information, so it's mostly a question about if and
>      how we want to expose it. Just thinking out loud, one could imagine
>      adding something to c.s.m.GarbageCollectorMXBean or c.s.m.ThreadMXBean,
>      or maybe even introduce a c.s.m.ZGarbageCollectorMXBean.
>      
>      cheers,
>      Per
>      
>      On 10/24/19 6:08 AM, Connaughton, Niall wrote:
>      > I was going to ask the same question.
>      >
>      > In addition - is there any documentation on how the allocation stalls work? I'm looking to understand things like whether the stall happens to any thread that attempts to allocate a new object, or only threads that need a new TLAB, or some other mechanism. Put another way - if we do something like jHiccup and have a thread constantly sleeping and allocating a small amount, would it detect allocation stalls? Or would it not be stalled until it exhausts its TLAB?
>      >
>      > Thanks,
>      > Niall
>      >
>      > On 10/22/19, 11:19, "zgc-dev on behalf of Sundara Mohan M" <zgc-dev-bounces at openjdk.java.net on behalf of m.sundar85 at gmail.com> wrote:
>      >
>      >      Hi,
>      >          I was trying to get GC metrics via GarbageCollectorMXBean but only see
>      >      CollectionCount and CollectionTime.
>      >      Even though i can get the Allocation Stall event from gc log i have to do
>      >      some special setup to get that collected and reported properly.
>      >      Since ZGC allocation stall is important event to identify if the
>      >      application is having issue, can we expose it via any other MXBean?
>      >
>      >      Thanks
>      >      Sundar
>      >
>      >
>      
> 


More information about the zgc-dev mailing list