RFR (S): 8195115: G1 Old Gen MemoryPool CollectionUsage.used values don't reflect mixed GC results

mandy chung mandy.chung at oracle.com
Mon Jan 29 21:40:41 UTC 2018


I created  JDK-8196362 to look into whether it makes sense to provide 
some categorization to differentiate eden space vs the heap space for 
long-lived objects.

W.r.t. to JDK-8195115, I have to defer to GC team to comment on the 
mixed collection update.  If they are okay, I have no objection to 
implement a short-term fix and do the proper G1 memory pools as a 
separate patch.

Mandy

On 1/29/18 1:02 PM, Hohensee, Paul wrote:
>
> We don’t use getType, and you guessed correctly: we use the memory 
> pool name as an indicator of the specific characteristics of a memory 
> pool, in particular eden.
>
> What we want is an indication of long term heap occupancy. We 
> calculate it using CollectionUsage for non-eden heap memory pools, 
> regardless of collector. We don’t use JMX notification, rather we 
> periodically poll CollectionUsage for memory pools with names that 
> contain “Old”, “Tenured”, or “Survivor”. We get the memory pools from 
> the GarbageCollectorMXBeans (we don’t care what the collector names 
> are). For the named memory pools, we sum CollectionUsage.used and 
> divide by the sum of CollectionUsage.max to get a long term heap 
> occupancy percentage. We don’t want to include eden because it’s 
> really just an allocation buffer and not part of the storage for 
> long-lived objects. I suppose we could use a negative test instead by 
> using all memory pools with names that don’t include “Eden”.
>
> The bug is that the “G1 Old Gen” memory pool isn’t being updated when 
> the “G1 Young Generation” collector runs a mixed collection. As far as 
> JMX is concerned, that collector only knows about eden and the 
> survivor space. The patch adds the old gen to the memory pools it 
> knows about and has mixed collections update the old gen’s 
> CollectionUsage.
>
> I managed to get a submit repo run to succeed last week and it found a 
> problem. I’ve uploaded a new webrev that fixes the failure of the 
> jtreg test TestMemoryMXBeansAndPoolsPresence.java due to the young gen 
> collector being expected to know only about eden and the survivor space.
>
> http://cr.openjdk.java.net/~phh/8195115/webrev.hs.01/ 
> <http://cr.openjdk.java.net/%7Ephh/8195115/webrev.hs.01/>
>
> Waiting on the submit repo to come back with a result on it.
>
> Thanks,
>
> Paul
>
> *From: *mandy chung <mandy.chung at oracle.com>
> *Organization: *Oracle Corporation
> *Date: *Monday, January 29, 2018 at 10:52 AM
> *To: *"Hohensee, Paul" <hohensee at amazon.com>, Erik Helin 
> <erik.helin at oracle.com>, David Holmes <david.holmes at oracle.com>
> *Cc: *"serviceability-dev at openjdk.java.net" 
> <serviceability-dev at openjdk.java.net>, 
> "hotspot-gc-dev at openjdk.java.net" <hotspot-gc-dev at openjdk.java.net>
> *Subject: *Re: RFR (S): 8195115: G1 Old Gen MemoryPool 
> CollectionUsage.used values don't reflect mixed GC results
>
> On 1/29/18 10:35 AM, mandy chung wrote:
>
>     Thanks for the reply Paul.   Try to understand a little more on
>     the specific from gc-specific memory pool you depend on.
>
>     On 1/29/18 8:27 AM, Hohensee, Paul wrote:
>
>         A name change would affect Amazon’s heap monitoring, and thus
>         I expect it would affect other users as well.
>
>         As long as there are gc-specific memory pools, we’re going to
>         need to be able to identify them, and right now that’s done
>         via name.
>
>
>     MemoryPoolMXBean::getType returns "heap" memory type for
>     GC-specific memory pools.  Are you using this method?  Do you use
>     the name to build in specific characteristic of a memory pool
>     (e.g. eden vs old gen)?
>
>
>
>         All the mxbeans are identified by name, so that’s a general
>         design principle. The only way I can think of to get rid of
>         name dependency would be to figure out what abstract metrics
>         users want to monitor and implement them for all collectors.
>         HeapUsage (instantaneous occupancy) is one, CollectionUsage
>         (long-lived occupancy) is another, both of these for the
>         entire heap, not just particular memory pools.
>
>
>     The sum of HeapUsage and CollectionUsage of all heap memory pools
>     was expected to give an incorrect approximation for the entire
>     heap usage.  Are you seeing issue/bug with the sum result?
>
>
> typo: s/an incorrect approximation/an approximation.
>
> Mandy
>
>
>     Mandy
>
>
>         That said, imo there will always be a demand for the ability
>         to get collector and memory pool specific details, so I don’t
>         see a way to get around providing named entities.
>
>         Paul
>
>         *From: *mandy chung <mandy.chung at oracle.com>
>         <mailto:mandy.chung at oracle.com>
>         *Organization: *Oracle Corporation
>         *Date: *Friday, January 26, 2018 at 2:38 PM
>         *To: *"Hohensee, Paul" <hohensee at amazon.com>
>         <mailto:hohensee at amazon.com>, Erik Helin
>         <erik.helin at oracle.com> <mailto:erik.helin at oracle.com>, David
>         Holmes <david.holmes at oracle.com> <mailto:david.holmes at oracle.com>
>         *Cc: *"serviceability-dev at openjdk.java.net"
>         <mailto:serviceability-dev at openjdk.java.net>
>         <serviceability-dev at openjdk.java.net>
>         <mailto:serviceability-dev at openjdk.java.net>,
>         "hotspot-gc-dev at openjdk.java.net"
>         <mailto:hotspot-gc-dev at openjdk.java.net>
>         <hotspot-gc-dev at openjdk.java.net>
>         <mailto:hotspot-gc-dev at openjdk.java.net>
>         *Subject: *Re: RFR (S): 8195115: G1 Old Gen MemoryPool
>         CollectionUsage.used values don't reflect mixed GC results
>
>         On 1/25/18 1:04 PM, Hohensee, Paul wrote:
>
>
>         > The JMX API spec doesn’t specify what the memory pool or
>         garbage > collector names are, but the current names are
>         de-facto part of the > API, so if we change the existing ones,
>         imo a CSR should be filed.
>
>         The names are implementation details but I can see how an application
>
>         might be impacted if they depend on it.  CSR approval is not strictly
>
>         necessary while I think filing one to document the change would be
>
>         good.
>
>         Does the name change impact any application you know of?  I'm trying to
>
>         understand if any improvement to API is needed so that applications
>
>         don't need to depend on the names.
>
>
>         Mandy
>
>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20180129/3a09539e/attachment-0001.html>


More information about the serviceability-dev mailing list