Incremental CMS: long "[GC [1 CMS-initial-mark:"

Andrei Pozolotin andrei.pozolotin at gmail.com
Wed Feb 17 15:42:14 PST 2010


    Ramki, hello again;

    1) "unfortunately" - got it; thank you;

    2) thanks for G1 idea; will try now;

    3) it does not seem gchisto / visualvm can see G1 at all;
    can you please recommend a tool that can help with G1 tuning?

    Cheers,

    Andrei


-------- Original Message  --------
Subject: Re: Incremental CMS: long  "[GC [1 CMS-initial-mark:"
From: Y. Srinivas Ramakrishna <Y.S.Ramakrishna at Sun.COM>
To: Andrei Pozolotin <andrei.pozolotin at gmail.com>
Cc: hotspot-gc-use at openjdk.java.net
Date: Wed 17 Feb 2010 05:31:23 PM CST
> On 02/17/10 14:57, Andrei Pozolotin wrote:
>>     Ramki, hi
>>
>>     Thank you for quick response;
>>
>>     from reading JDK 6 source I deluded myself that the problem you
>>     describe:
>>
>>     "... occurs sometime between two scavenges ..."
>>
>>     would get fixed by these options:
>>
>>     wrapper.java.additional.175=-XX:+CMSParallelRemarkEnabled
>>     wrapper.java.additional.176=-XX:+CMSScavengeBeforeRemark
>>     wrapper.java.additional.177=-XX:CMSIncrementalOffset=10
>>     wrapper.java.additional.178=-XX:CMSScheduleRemarkEdenPenetration=5
>>
>>     please confirm I was wrong?
>
> Yes, unfortunately, those are in some sense orthogonal to
> the way CMS "incrementalizes" its working, here (somewhat
> relatedly see [1])
>
> For example, CMSScavengeBeforeRemark does indeed schedule a scavenge
> before a remark pause, but not (unfortunately) before an initial
> mark pause. Similarly the CMSScheduleRemarkEdenPenetration
> controls the scheduling of remark pauses, not the initial
> mark pauses.
>
> As for CMSIncrementalOffset, it is just a constant positive delta
> applied to the ideal starting point for a given duty cycle.
> So, in fact, any positive value will take you further away
> from the objective you are trying to achieve here of reducing
> the occupancy of Eden when initial mark hits.
>
> Try G1, that may save you filing an RFE on (i)CMS for this.
>
> Honestly though, there is an existing blanket RFE on this:
>   6412968 CMS: Long initial mark pauses
> but it has not risen to the top of our list of things to fix.
>
> If this is important, please contact your Java support....
>
> -- ramki
>
> [1] 6518192 iCMS: smoother, duration-bounded incrementality
>
>
>>     Cheers,
>>
>>     Andrei
>>
>>
>>
>> -------- Original Message  --------
>> Subject: Re: Incremental CMS: long  "[GC [1 CMS-initial-mark:"
>> From: Y. Srinivas Ramakrishna <Y.S.Ramakrishna at Sun.COM>
>> To: Andrei Pozolotin <andrei.pozolotin at gmail.com>
>> Cc: hotspot-gc-use at openjdk.java.net
>> Date: Wed 17 Feb 2010 04:42:34 PM CST
>>> On 02/17/10 14:28, Andrei Pozolotin wrote:
>>>>       *Jon, *hello;
>>>>
>>>>     I need to convert CMS into incremental CMS to reduce latency,
>>>>     eliminate occasional "concurrent mode failure" - related pauses;
>>>>
>>>>     and I am running into the following problem:
>>>>
>>>>     1) in "normal CMS" - [GC [1 CMS-initial-mark: takes 50
>>>> milliseconds
>>>>
>>>>     2) in "incremental CMS" - [GC [1 CMS-initial-mark:  takes 800
>>>>     milliseconds
>>>
>>> This is to be expected and is a consequence of how and when
>>> the initial mark is done in "normal" vs "incremental".
>>> In the former, the initial mark almost immediately follows
>>> after a scavenge pause and Eden is empty. In the latter case
>>> it normally occurs sometime between two scavenges by which time
>>> Eden has objects in it. For various reasons, the young gen
>>> is scanned as a source of initial roots to mark from,
>>> and for various reasons it is currently the case that this
>>> work is done single-threaded.
>>>
>>> As you will find, the magnitude of this difference typically
>>> depends (among other factors) on the size of Eden you specify
>>> (being directly proportional to it) and the duty cycle you
>>> specify (being inversely proportional to it).
>>>
>>> There are ways to fix this in the JVM, but no real workaround that
>>> i can think of at the command-line level.
>>>
>>> If this is important, please file a bug on this via your
>>> support contacts.
>>>
>>> thanks!
>>> -- ramki
>>>
>>>>
>>>>     both above results are under same no-load conditions,
>>>>     with non-reducible statuc heap object set of 430 MB
>>>>     composed of some 350K complex objects;
>>>>
>>>>     I can not understand why and how to fix it;
>>>>     I tried a lot of Incremental CMS - related option combinations,
>>>>     still dead end.
>>>>
>>>>     GC settings, log attached;
>>>>
>>>>     Thank you for your help,
>>>>
>>>>     Andrei
>>>>
>>>>     ++++++++++++++++++++++++++++++++++++++++++++++++
>>>>
>>>>     # use server-style JIT compiler
>>>>     wrapper.java.additional.100=-server
>>>>
>>>>     # do GC logging
>>>>     wrapper.java.additional.110=-verbose:gc
>>>>     wrapper.java.additional.111=-Xloggc:./logs/gc.log
>>>>     wrapper.java.additional.112=-XX:+PrintGCDetails
>>>>     wrapper.java.additional.113=-XX:+PrintGCTimeStamps
>>>>
>>>>     # Heap Total = PermGen + NewGen + OldGen;
>>>>     wrapper.java.additional.120=-Xms3700m
>>>>     wrapper.java.additional.121=-Xmx3700m
>>>>
>>>>     # PermGen;
>>>>     wrapper.java.additional.130=-XX:PermSize=50m
>>>>     wrapper.java.additional.131=-XX:MaxPermSize=50m
>>>>
>>>>     # NewGen; Parallel collector;
>>>>     wrapper.java.additional.140=-XX:NewSize=1200m
>>>>     wrapper.java.additional.141=-XX:MaxNewSize=1200m
>>>>     wrapper.java.additional.142=-XX:-UseAdaptiveSizePolicy
>>>>     wrapper.java.additional.143=-XX:SurvivorRatio=1
>>>>     wrapper.java.additional.144=-XX:TargetSurvivorRatio=90
>>>>     wrapper.java.additional.145=-XX:MaxTenuringThreshold=3
>>>>     wrapper.java.additional.146=-XX:+UseParNewGC
>>>>     wrapper.java.additional.147=-XX:-UseParallelGC
>>>>     wrapper.java.additional.148=-XX:ParallelGCThreads=4
>>>>
>>>>     # OldGen; Incremental CMS collector;
>>>>     wrapper.java.additional.170=-XX:-UseParallelOldGC
>>>>     wrapper.java.additional.171=-XX:+UseConcMarkSweepGC
>>>>     wrapper.java.additional.172=-XX:+CMSIncrementalMode
>>>>     wrapper.java.additional.173=-XX:-CMSIncrementalPacing
>>>>     wrapper.java.additional.174=-XX:CMSIncrementalDutyCycle=1
>>>>     wrapper.java.additional.175=-XX:+CMSParallelRemarkEnabled
>>>>     wrapper.java.additional.176=-XX:+CMSScavengeBeforeRemark
>>>>     wrapper.java.additional.177=-XX:CMSIncrementalOffset=10
>>>>     wrapper.java.additional.178=-XX:CMSScheduleRemarkEdenPenetration=5
>>>>     wrapper.java.additional.179=-XX:CMSWaitDuration=60000
>>>>     wrapper.java.additional.181=-XX:ParallelCMSThreads=1
>>>>     wrapper.java.additional.182=-XX:PrintCMSStatistics=0
>>>>
>>>>
>>>> ------------------------------------------------------------------------
>>>>
>>>>
>>>> _______________________________________________
>>>> hotspot-gc-use mailing list
>>>> hotspot-gc-use at openjdk.java.net
>>>> http://mail.openjdk.java.net/mailman/listinfo/hotspot-gc-use
>>>
>>>
>>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/hotspot-gc-use/attachments/20100217/7646c6fc/attachment-0001.html 


More information about the hotspot-gc-use mailing list