ZGC Unable to reclaim memory for long time
Peter Booth
peter_booth at me.com
Tue Nov 5 15:48:43 UTC 2019
Reading this and similar threads I am struck by the fact that ZGC users are experiencing things that users of Azul’s Zing JVM also go through. I remember the amazement at seeing a JVM run without substantive GC pauses and thinking that it was a free lunch. But the price was two parts - ensuring adequate heap, and rewiring brains that are accustomed to seeing cpu and memory as independent resources. The second turns out to be much harder.
From experience, I think a lot of pain can be avoided by clearly communicating that an adequate heap is a prerequisite for a healthy JVM. Most java developers have absorbed the notion that large heaps are bad/risky and unlearning takes time.
Sent from my iPhone
> On Nov 4, 2019, at 8:28 PM, Sundara Mohan M <m.sundar85 at gmail.com> wrote:
>
> HI Per,
> This explains why it didn't work to reclaim memory, also my heap memory was
> 8G and 6G was strongly reachable (when i took heap dump). Agreed increasing
> heap memory will help in this case.
>
> Still trying to understand better on ZGC,
> 1. So shouldn't GC try to be more aggressive and try to put more effort to
> reclaim without additional settings?
> 2. Is there a reason why it shouldn't give more CPU to GC threads and
> reclaim garbage (say after X run of GC it could not reclaim memory)? In
> this case it would be good to reclaim existing garbage instead of doing
> Allocation Stall and failing with heap out of memory.
>
>
> Thanks
> Sundar
>
>> On Mon, Nov 4, 2019 at 12:40 PM Per Liden <per.liden at oracle.com> wrote:
>>
>> Hi,
>>
>> When a workload produces a uniformly swiss-cheesy heap, i.e. where all
>> parts of the heap have roughly the same amount of garbage, then the GC
>> will face a situation where there are no free lunches and it will have
>> to work hard (compact a lot) to reclaim memory. Therefore, the GC will
>> tolerate a certain amount of fragmentation/waste, in the hope that more
>> object will die soon, making compaction less expensive (at the expense
>> of using more memory for a while). How many CPU cycles to spend on
>> compaction vs. how much memory you can spare is of course a trade-off.
>>
>> You can use -XX:ZFragmentationLimit to control this. It currently
>> defaults to 25% and your workload seems to stabilize at 21%. If you want
>> more aggressive compaction/reclamation, then set the
>> -XX:ZFragmentationLimit to something below 21. This may or may not be a
>> good trade-off in your case. The alternative is to give the GC a larger
>> heap to work with.
>>
>> cheers,
>> Per
>>
>>> On 11/4/19 7:56 PM, Sundara Mohan M wrote:
>>> Hi,
>>> I ran into this issue where ZGC is unable to reclaim memory for few
>>> hours/days. It just keep printing "Exception in thread "RMI TCP
>>> Connection(idle)" java.lang.OutOfMemoryError: Java heap space" and
>>> Allocation Stall happening on that thread.
>>>
>>>
>>> Here is the metrics which shows for some reason even though there is
>>> Garbage but it is unable to Reclaim
>>>
>>> ....
>>> [2019-11-04T*08:39:53.986+0000*][1765465.981s][info][gc,heap ]
>>> GC(112126) Live: - 6366M (78%) 6366M
>> (78%)
>>> 6366M (78%)
>>> - -
>>> *[2019-11-04T08:39:53.986+0000][1765465.981s][info][gc,heap ]
>>> GC(112126) Garbage: - 1735M (21%) 1735M
>> (21%)
>>> 1731M (21%)*
>>> - -
>>> [2019-11-04T08:39:53.986+0000][1765465.981s][info][gc,heap ]
>> GC(112126)
>>> Reclaimed: - - 0M (0%)
>>> 4M (0%)
>>> ...
>>>
>>> [2019-11-04T16:48:53.742+0000][1794805.738s][info][gc,heap ]
>> GC(135520)
>>> Live: - 6367M (78%) 6367M (78%)
>>> 6367M (78%)
>>> - -
>>> *[2019-11-04T16:48:53.742+0000][1794805.738s][info][gc,heap ]
>>> GC(135520) Garbage: - 1730M (21%) 1730M
>> (21%)
>>> 1724M (21%)*
>>> - -
>>> [2019-11-04T16:48:53.742+0000][1794805.738s][info][gc,heap ]
>> GC(135520)
>>> Reclaimed: - - 0M (0%)
>>> 6M (0%)
>>>
>>> Here it was in this state for ~8hours and it is still happening. It says
>>> has a Garbage of 21G but it is not able to Reclaim it everytime it
>> reclaims
>>> only 4-6M.
>>>
>>> Any idea what might be the issue here.
>>>
>>>
>>> TIA
>>> Sundar
>>>
>>
More information about the zgc-dev
mailing list