Ich sehe die folgenden Symptome auf eine GC-Log-Datei der Anwendung mit den Concurrent Mark-Sweep Sammlern:JVM CMS Müllprobleme Sammeln
4031.248: [CMS-concurrent-preclean-start]
4031.250: [CMS-concurrent-preclean: 0.002/0.002 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
4031.250: [CMS-concurrent-abortable-preclean-start]
CMS: abort preclean due to time 4036.346: [CMS-concurrent-abortable-preclean: 0.159/5.096 secs] [Times: user=0.00 sys=0.01, real=5.09 secs]
4036.346: [GC[YG occupancy: 55964 K (118016 K)]4036.347: [Rescan (parallel) , 0.0641200 secs]4036.411: [weak refs processing, 0.0001300 secs]4036.411: [class unloading, 0.0041590 secs]4036.415: [scrub symbol & string tables, 0.0053220 secs] [1 CMS-remark: 16015K(393216K)] 71979K(511232K), 0.0746640 secs] [Times: user=0.08 sys=0.00, real=0.08 secs]
Der preclean Prozess hält kontinuierlich abgebrochen wird. Ich habe versucht, CMSMaxAbortablePrecleanTime auf 15 Sekunden, von der Standardeinstellung 5, anzupassen, aber das hat nicht geholfen. Die aktuellen JVM-Optionen sind wie folgt ...
Djava.awt.headless=true
-Xms512m
-Xmx512m
-Xmn128m
-XX:MaxPermSize=128m
-XX:+HeapDumpOnOutOfMemoryError
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:BiasedLockingStartupDelay=0
-XX:+DoEscapeAnalysis
-XX:+UseBiasedLocking
-XX:+EliminateLocks
-XX:+CMSParallelRemarkEnabled
-verbose:gc
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-XX:+PrintHeapAtGC
-Xloggc:gc.log
-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenPrecleaningEnabled
-XX:CMSInitiatingOccupancyFraction=50
-XX:ReservedCodeCacheSize=64m
-Dnetworkaddress.cache.ttl=30
-Xss128k
Es scheint die gleichzeitige abbrechbare-Vorreinigung wird nie eine Chance zu laufen. Ich lese durch https://blogs.oracle.com/jonthecollector/entry/did_you_know, die einen Vorschlag zum Aktivieren CMSScavengeBeforeRemark hatte, aber die Nebenwirkungen der Pause schien nicht ideal. Könnte jemand Vorschläge machen?
Auch war ich frage mich, ob jemand eine gute Referenz für grokking die CMS-GC-Logs hatte, insbesondere dieser Zeile:
[1 CMS-remark: 16015K(393216K)] 71979K(511232K), 0.0746640 secs]
Nicht auf welche Speicherbereiche klar diese Zahlen zu beziehen. bearbeiten einen Link zu diesem http://www.sun.com/bigadmin/content/submitted/cms_gc_logs.jsp
gefunden
Das cms-Tag wird verwendet, um sich auf Content-Management-Systeme zu beziehen, nicht auf gleichzeitige GCs für Markierungen und Sweeps. Ich werde es entfernen. –
Whoops tut mir leid, danke – jlintz
Das Einleiten von CMS bei 50% scheint irgendwie niedrig zu sein: -XX: CMSInitiatingOccupancyFraction = 50 Vielleicht wird es (oder unter Verwendung der Standardeinstellungen als 'Antispam' schlägt) anders verhalten. Auch haben meine Protokolle in der Regel ParNew laufen sie vor, während und nach CMS. Läuft ParNew? –