Growing GC Young Gen Times

Y. Srinivas Ramakrishna y.s.ramakrishna at oracle.com
Thu May 13 14:52:24 PDT 2010


On 05/13/10 10:50, Matt Fowles wrote:
> Jon~
> 
> This may sound naive, but how can fragmentation be an issue if the old
> gen has never been collected?  I would think we are still in the space
> where we can just bump the old gen alloc pointer...

Matt, The old gen allocator may fragment the space. Allocation is not exactly "bump a pointer".

-- ramki

> 
> Matt
> 
> On Thu, May 13, 2010 at 12:23 PM, Jon Masamitsu
> <jon.masamitsu at oracle.com> wrote:
>> Matt,
>>
>> As Ramki indicated fragmentation might be an issue.  As the fragmentation
>> in the old generation increases, it takes longer to find space in the old
>> generation
>> into which to promote objects from the young generation.  This is apparently
>> not
>> the problem that Wayne is having but you still might be hitting it.  If you
>> can
>> connect jconsole to the VM and force a full GC, that would tell us if it's
>> fragmentation.
>>
>> There might be a scaling issue with the UseParNewGC.  If you can use
>> -XX:-UseParNewGC (turning off the parallel young
>> generation collection) with  -XX:+UseConcMarkSweepGC the pauses
>> will be longer but may be more stable.  That's not the solution but just
>> part
>> of the investigation.
>>
>> You could try just -XX:+UseParNewGC without -XX:+UseConcMarkSweepGC
>> and if you don't see the growing young generation pause, that would indicate
>> something specific about promotion into the CMS generation.
>>
>> UseParallelGC is different from UseParNewGC in a number of ways
>> and if you try UseParallelGC and still see the growing young generation
>> pauses, I'd suspect something special about your application.
>>
>> If you can run these experiments hopefully they will tell
>> us where to look next.
>>
>> Jon
>>
>>
>> On 05/12/10 15:19, Matt Fowles wrote:
>>
>> All~
>>
>> I have a large app that produces ~4g of garbage every 30 seconds and
>> am trying to reduce the size of gc outliers.  About 99% of this data
>> is garbage, but almost anything that survives one collection survives
>> for an indeterminately long amount of time.  We are currently using
>> the following VM and options:
>>
>> java version "1.6.0_20"
>> Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
>> Java HotSpot(TM) 64-Bit Server VM (build 16.3-b01, mixed mode)
>>
>>                -verbose:gc
>>                -XX:+PrintGCTimeStamps
>>                -XX:+PrintGCDetails
>>                -XX:+PrintGCTaskTimeStamps
>>                -XX:+PrintTenuringDistribution
>>                -XX:+PrintCommandLineFlags
>>                -XX:+PrintReferenceGC
>>                -Xms32g -Xmx32g -Xmn4g
>>                -XX:+UseParNewGC
>>                -XX:ParallelGCThreads=4
>>                -XX:+UseConcMarkSweepGC
>>                -XX:ParallelCMSThreads=4
>>                -XX:CMSInitiatingOccupancyFraction=60
>>                -XX:+UseCMSInitiatingOccupancyOnly
>>                -XX:+CMSParallelRemarkEnabled
>>                -XX:MaxGCPauseMillis=50
>>                -Xloggc:gc.log
>>
>>
>> As you can see from the GC log, we never actually reach the point
>> where the CMS kicks in (after app startup).  But our young gens seem
>> to take increasingly long to collect as time goes by.
>>
>> The steady state of the app is reached around 956.392 into the log
>> with a collection that takes 0.106 seconds.  Thereafter the survivor
>> space remains roughly constantly as filled and the amount promoted to
>> old gen also remains constant, but the collection times increase to
>> 2.855 seconds by the end of the 3.5 hour run.
>>
>> Has anyone seen this sort of behavior before?  Are there more switches
>> that I should try running with?
>>
>> Obviously, I am working to profile the app and reduce the garbage load
>> in parallel.  But if I still see this sort of problem, it is only a
>> question of how long must the app run before I see unacceptable
>> latency spikes.
>>
>> Matt
>>
>> ________________________________
>> _______________________________________________
>> hotspot-gc-use mailing list
>> hotspot-gc-use at openjdk.java.net
>> http://mail.openjdk.java.net/mailman/listinfo/hotspot-gc-use
> _______________________________________________
> hotspot-gc-use mailing list
> hotspot-gc-use at openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/hotspot-gc-use



More information about the hotspot-gc-use mailing list