Pourquoi CMS(concurrent du mode de défaillance) est passé ici?
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]
Pourquoi CMS(concurrent du mode de défaillance) est passé ici?
L'ancienne génération semble : 331336K->71676K(786432K)
OriginalL'auteur user447044 | 2010-09-14
Vous devez vous connecter pour publier un commentaire.
Simultanées En Mode Échec tel que défini
En d'autres termes, la nouvelle génération se remplit trop vite, il est débordant d'permanent de la génération, mais le CMS ne pouvait pas effacer le titulaire de génération en arrière-plan.
Dans votre cas, à 945270.397
ParNew: 225163K->225163K(235968K)
montre le Jeune est pleine et ne pouvait pas effacer les objets.Mise à jour
Similaire journal de la vôtre est expliqué dit ici
Donc, comme je le vois, un full GC sur les jeunes, les objets de 225M ainsi que les Titulaires de 331K prend 13 secondes et obtient le tas en bas à 71 M, mais cela a été une conséquence de la concurrente mode de défaillance
Suggestion
Si vous êtes vraiment à la création d'un grand nombre d'anciens objets, alors vous avez probablement besoin d'un plus grand tas.
Ou de réduire essayez de réduire la -XX:CMSInitiatingOccupancyFraction à partir de 60 ans, mais ne pense que cela va faire beaucoup de diff
Ah j'ai tort compté le 71676K comme 716 M, il est en fait 71 M.
331336K->71676K(786432K),Cela signifie avant gc,Titularisés ont utilisé 331336k,après gc,Titularisés ont utilisé 71676k.Et mon Titularisés ont alloué 786432k. Donc, la question est venu,331336/786432=42% des titulaires a été utilisé,mais pourquoi CMS(concurrent du mode de défaillance) est passé ici ?
voir le bloc dans ma mise à jour. Bien que seulement 42% des titulaires a été utilisé, la JVM estimé que la promotion échoue et interrompu le CMS
Comme l'article le dit,je pense que le problème peut se produire en raison de la fragmentation de problème", même si ça n'est pas arrivé souvent dans le JDK 1.5. - Je modifier ces paramètres: -XX:CMSFullGCsBeforeCompaction=de 5 à 1, -XX:CMSInitiatingOccupancyFraction=60 à 50, -XX:SurvivorRatio=8 à 6, Ajouter: -XX:+UseCMSInitiatingOccupancyOnly=true . Je vais suivre le journal.
OriginalL'auteur JoseK