Rare very big pause

Kirill A. Korinsky kirill at korins.ky
Tue Dec 19 17:43:19 UTC 2017


Well, it helps decrease pauses, but it is still about 150-200 ms.

For example:

Concurrent marking triggered. Free: 1718M, Free Threshold: 1720M; Allocated: 1718M, Alloc Threshold: 0M
2017-12-19T16:59:02.785+0000: 3055.494: [Pause Init Mark, 2.553 ms]
2017-12-19T16:59:02.788+0000: 3055.496: [Concurrent marking 4418M->4723M(6144M), 916.628 ms]
2017-12-19T16:59:03.710+0000: 3056.419: [Pause Final MarkTotal Garbage: 3555M
Immediate Garbage: 1374M, 688 regions (41% of total)
Garbage to be collected: 1849M (52% of total), 965 regions
Live objects to be evacuated: 80M
Live/garbage ratio in collected regions: 4%
 4723M->3351M(6144M), 175.951 ms]
2017-12-19T16:59:03.886+0000: 3056.595: [Concurrent evacuation 3352M->3453M(6144M), 71.376 ms]
2017-12-19T16:59:03.959+0000: 3056.667: [Pause Init Update Refs, 0.099 ms]
2017-12-19T16:59:03.959+0000: 3056.667: [Concurrent update references  3453M->3489M(6144M), 578.340 ms]
2017-12-19T16:59:04.538+0000: 3057.246: [Pause Final Update Refs 3489M->1560M(6144M), 2.241 ms]
2017-12-19T16:59:04.540+0000: 3057.249: [Concurrent reset bitmaps 1560M->1560M(6144M), 3.516 ms]
Capacity: 6144M, Peak Occupancy: 4723M, Lowest Free: 1420M, Free Threshold: 1228M
Adjusting free threshold to: 25% (1536M)


--
wbr, Kirill


> On 19 Dec 2017, at 19:35, Kirill A. Korinsky <kirill at korins.ky> wrote:
> 
> Thanks for advice.
> 
> Trying.
> 
> --
> wbr, Kirill
> 
> 
>> On 19 Dec 2017, at 19:25, Aleksey Shipilev <shade at redhat.com> wrote:
>> 
>> On 12/19/2017 04:12 PM, Kirill A. Korinsky wrote:
>>> May you suggest any way to understand where and how much it try to allocate?
>>> 
>>> Because this application shouldn't allocate so big memory and how I can see it from line before it had 245Mb free memory when GC cycle happened.
>>>> Concurrent marking triggered. Free: 245M, Free Threshold: 245M; Allocated: 245M, Alloc Threshold: 0M
>> 
>> I don't think this is application's fault. Your config runs with 4 GB heap. Default settings for
>> "adaptive" heuristics target to maintain 3% of free heap at all times during the cycle. That means
>> 120M. Single application thread may allocate this much in around 20 ms. And concurrent mark takes
>> around a second. So, we have only a razor-thin room for error here. With a small heap like that,
>> even a trivial allocation spike may blow up with Allocation Failure.
>> 
>> I guess Shenandoah's heuristics needs to reserve more on smaller heaps, so that some absolute amount
>> of space was always available. We have patches in queue to make this better. Meanwhile, you may want
>> to adjust these:
>> 
>> experimental(uintx, ShenandoahInitFreeThreshold, 30,                      \
>>              "Initial remaining free threshold for adaptive heuristics")  \
>>         range(0,100)                                                      \
>>                                                                           \
>> experimental(uintx, ShenandoahMinFreeThreshold, 3,                        \
>>              "Minimum remaining free threshold for adaptive heuristics")  \
>>         range(0,100)                                                      \
>>                                                                           \
>> experimental(uintx, ShenandoahMaxFreeThreshold, 70,                       \
>>              "Maximum remaining free threshold for adaptive heuristics")  \
>>         range(0,100)                                                      \
>>                                                                           \
>> 
>> Say, -XX:ShenandoahMinFreeThreshold=20 for your case.
>> 
>> Thanks,
>> -Aleksey
>> 
> 



More information about the shenandoah-dev mailing list