Unreasonably long ParNew, CMS pause times

Y. S. Ramakrishna y.s.ramakrishna at oracle.com
Wed Jul 21 12:40:28 PDT 2010


oh, and the "(max 0)" seems to imply you have somehow ended up asking for
MaxTenuringThreshold=0 which can be disastrous. It is possible that the
default settings for CMS on certain very old JVM's did indeed result in
MTT=0 (but memory is fading of that era), so if using such older vintage
of JVM's, explicitly setting MTT and SurvivorRatio higher is a good idea.

-- ramki

On 07/21/10 12:34, Y. S. Ramakrishna wrote:
> Yes, like what i think Matt is getting at, i'd configure sufficiently
> large survivor spaces. Even if you expect most of your objects to die young,
> you'd want survivor spaces large enough to keep at least age 1 objects in
> the survivor space. If as you state no medium- to ling-lived state is
> retained, your data is mostly short-lived and you'll be able to do without
> any promotion at all. Your problem here is that somehow your survivor
> spaces may have disappeared. (+PrintHeapAtGC will tell you, and
> of course examining yr JVM options should shed more light on that apparent
> disappearance.)
> 
> -- ramki
> 
> On 07/21/10 10:09, Eagle Kessler wrote:
>> Hello all,
>>   I've got a web service that I'm seeing some very strange behavior on 
>> around it's garbage collection, and was wondering if someone here could 
>> explain why it might be happening. The service itself is fairly simple: 
>> Take in data from a few sources and merge them with the existing data in 
>> the database. It stores nearly no state while doing this, and indeed 
>> heap dumps taken 1, 24, and 72 hours after boot indicate that we have a 
>> consistent ~12mb of live data (in a 2GB heap, but I hope that's not what 
>> is causing this).
>>
>> The GC logs, though, don't look very happy at all. After our start up 
>> period, they settle into a fairly consistent pattern:
>>
>> 1041.159: [GC 1041.159: [ParNew
>> Desired survivor size 2064384 bytes, new threshold 0 (max 0)
>>
>> : 516224K->0K(520256K), 0.0170322 secs] 537266K->22659K(2093120K), 0.0171330 secs] [Times: user=0.04 sys=0.01, real=0.02 secs] 
>> 1606.500: [GC 1606.500: [ParNew
>> Desired survivor size 2064384 bytes, new threshold 0 (max 0)
>>
>> : 516224K->0K(520256K), 0.0173235 secs] 538883K->24214K(2093120K), 0.0174138 secs] [Times: user=0.04 sys=0.03, real=0.02 secs] 
>> 2040.773: [GC 2040.773: [ParNew
>> Desired survivor size 2064384 bytes, new threshold 0 (max 0)
>>
>> : 516224K->0K(520256K), 0.0196319 secs] 540438K->25737K(2093120K), 0.0197275 secs] [Times: user=0.05 sys=0.02, real=0.02 secs] 
>>
>> Which we would be very nice if it kept going like that. However, by the 
>> first time the CMS collector runs, things aren't working nearly as well:
>>
>> 214182.439: [GC 214182.439: [ParNew
>> Desired survivor size 2064384 bytes, new threshold 0 (max 0)
>> : 516224K->0K(520256K), 1.0146996 secs] 1297278K->782575K(2093120K), 1.0148799 secs] [Times: user=1.21 sys=0.58, real=1.01 secs] 
>>
>> 214247.437: [GC 214247.438: [ParNew
>> Desired survivor size 2064384 bytes, new threshold 0 (max 0)
>> : 516224K->0K(520256K), 1.2310274 secs] 1298799K->784188K(2093120K), 1.2311534 secs] [Times: user=1.46 sys=0.69, real=1.23 secs] 
>>
>> 214313.642: [GC 214313.642: [ParNew
>> Desired survivor size 2064384 bytes, new threshold 0 (max 0)
>> : 516224K->0K(520256K), 1.2183258 secs] 1300412K->785710K(2093120K), 1.2184848 secs] [Times: user=1.45 sys=0.65, real=1.22 secs]
>>
>> The increasing sys time is a bit worrying, but it seems like the actual 
>> GC time is rising as well, even though we aren't collecting any more 
>> young-gen garbage. At this point, CMS went off
>>
>> 214380.695: [GC [1 CMS-initial-mark: 787188K(1572864K)] 787195K(2093120K), 1.8929842 secs] [Times: user=1.50 sys=0.02, real=1.89 secs] 
>>
>> 214382.589: [CMS-concurrent-mark-start]
>> 214383.056: [CMS-concurrent-mark: 0.467/0.467 secs] [Times: user=1.81 sys=0.01, real=0.47 secs] 
>> 214383.056: [CMS-concurrent-preclean-start]
>> 214383.064: [CMS-concurrent-preclean: 0.008/0.008 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 
>>
>> 214383.064: [CMS-concurrent-abortable-preclean-start]
>>  CMS: abort preclean due to time 214388.133: [CMS-concurrent-abortable-preclean: 0.242/5.069 secs] [Times: user=5.02 sys=0.02, real=5.07 secs] 
>> 214388.159: [GC[YG occupancy: 51943 K (520256 K)]214388.159: [Rescan (parallel) , 1.5403455 secs]214389.699: [weak refs processing, 0.0050170 secs] [1 CMS-remark: 787188K(1572864K)] 839132K(2093120K), 1.5458536 secs] [Times: user=1.80 sys=0.71, real=1.55 secs] 
>>
>> 214389.705: [CMS-concurrent-sweep-start]
>> 214390.439: [CMS-concurrent-sweep: 0.671/0.734 secs] [Times: user=1.35 sys=0.00, real=0.73 secs] 
>> 214390.439: [CMS-concurrent-reset-start]
>> 214390.621: [CMS-concurrent-reset: 0.183/0.183 secs] [Times: user=0.20 sys=0.02, real=0.18 secs]
>>
>> It seems like a) initial-mark shouldn't take 1.8 seconds, b) if we 
>> really do only have 12mb of live data, CMS should have collected a lot 
>> more than it did (the next ParNew collection reported ~545MB of old gen 
>> in use), and c) 50% heap usage with very little promotion seems very 
>> early for the collector to go off.
>>
>> The next CMS cycle is at 434,973 seconds, by which point the young gen 
>> collections are taking 3 seconds (user 3.59, sys 1.60, real 3.09). The 
>> initial mark takes 4.82 seconds (user 3.82, sys 0.02, real 4.82), and 
>> sweeps down to 1.1gb of used old gen. I haven't yet confirmed it, but 
>> given the previous heap dumps I'd guess that they will claim 12mb of 
>> live objects and 1.1gb of dead objects. The current young gen 
>> collections (at 497,601 seconds) are taking ~3.7 seconds (4.33 user, 
>> 2.03 sys) Any idea what could be going on here? We're running JDK 1.6_16.
>>
>> -- 
>> Eagle Kessler
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> 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
_______________________________________________
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-dev mailing list