Warum CMS(concurrent mode failure) ist hier passiert?
Operation System: Red Hat Linux 4.8
CPU Info: Intel(R) Xeon(R) CPU 5160 @ 3.00GHz X 16
JDK version: "1.5.0_16"
JVM Parameter:
-server
-Xmx1024m
-Xms1024m
-XX:NewSize=256m
-XX:MaxNewSize=256m
-XX:PermSize=128m
-XX:MaxPermSize=128m
-XX:SurvivorRatio=8
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+UseConcMarkSweepGC
-XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction=5
-XX:CMSInitiatingOccupancyFraction=60
-XX:CMSMaxAbortablePrecleanTime=5
-XX:+CMSPermGenSweepingEnabled
-XX:+CMSClassUnloadingEnabled
-XX:MaxGCPauseMillis=1500
JVM GC Log:
945188.489: [GC 945188.489: [ParNew: 224543K->14968K(235968K), 0.0506680 secs] 552200K->344514K(1022400K), 0.0507700 secs]
945242.102: [GC 945242.102: [ParNew: 224760K->15374K(235968K), 0.0632410 secs] 554306K->346710K(1022400K), 0.0633450 secs]
945270.397: [GC 945270.402: [ParNew: 225163K->225163K(235968K), 0.0000230 secs]945270.402: [CMS (concurrent mode failure)[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor70]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor58]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor38]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor62]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor54]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor74]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor53]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor73]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor64]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor39]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor59]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor51]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor42]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor48]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor76]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor52]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor57]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor61]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor56]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor55]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor63]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor60]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor40]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor65]
: 331336K->71676K(786432K), 13.8120660 secs] 556499K->71676K(1022400K), 13.8122360 secs]
945289.234: [GC 945289.234: [ParNew: 209792K->2581K(235968K), 0.0065240 secs] 281468K->74257K(1022400K), 0.0066160 secs]
945324.703: [GC 945324.703: [ParNew: 212373K->3829K(235968K), 0.0081040 secs] 284049K->75506K(1022400K), 0.0082040 secs]
Warum CMS(concurrent mode failure) ist hier passiert?
Die alte generation scheint : 331336K->71676K(786432K)
InformationsquelleAutor user447044 | 2010-09-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Concurrent Mode Failure wie definiert
In anderen Worten, die neue generation füllt sich zu schnell, es ist überfüllt, pragmatisierte generation, sondern der CMS konnte nicht klar aus den Inhaber-generation in den hintergrund.
In Ihrem Fall, bei 945270.397
ParNew: 225163K->225163K(235968K)
zeigt der Junge war voll und konnte nicht klar ist, Objekte im all.Update
Einen ähnlichen anmelden um Ihre ist erklärt hier sagt
So wie ich es sehe, eine volle GC auf der young Objekte von 225M sowie die Inhaber von 331K dauert 13 Sekunden und erhält den heap nach unten bis 71 M, aber dies war ein Ergebnis der concurrent mode failure
Vorschlag
Wenn Sie es wirklich schaffen, so viele alte Objekte, dann brauchst du wohl einen größeren Haufen.
Reduzieren oder verringern Sie die -XX:CMSInitiatingOccupancyFraction von 60, aber glaube nicht, dass viel von einem diff
Ah, ich habe falsch gezählt, 71676K als 716 M, es ist in der Tat 71 M.
331336K->71676K(786432K),Es bedeutet vor gc,Inhaber verwendet haben 331336k,nach gc,Inhaber verwendet haben 71676k.Und meine Fest reserviert haben 786432k. So kam die Frage,331336/786432=42% pragmatisierte verwendet wurde,aber warum CMS(concurrent mode failure) ist hier passiert ?
finden Sie den block in meinem update. Obwohl nur 42% der Inhaber verwendet wurde, die JVM geschätzt, dass die Förderung nicht und würde unterbrochen CMS
Wie der Artikel schon sagte,ich denke, dass problem kann geschehen, weil der "Fragmentierung" problem,wenn es nicht passiert Häufig in JDK 1.5. Ich ändern Sie diese parameter: -XX:CMSFullGCsBeforeCompaction=5 zu 1, -XX:CMSInitiatingOccupancyFraction=60-50-XX:SurvivorRatio=8-6, Hinzufügen: -XX:+UseCMSInitiatingOccupancyOnly=true . Ich werde monitor log.
InformationsquelleAutor JoseK