tôi nhìn thấy các triệu chứng sau đây trong hồ sơ GC log của một ứng dụng với đồng thời thu Mark-Sweep:JVM CMS rác Thu vấn đề
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]
Quá trình làm sạch trước tiếp tục hủy liên tục. Tôi đã thử điều chỉnh CMSMaxAbortablePrecleanTime thành 15 giây, từ mặc định là 5, nhưng điều đó không giúp được gì. Các tùy chọn JVM hiện tại là như sau ...
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
Dường như tiền đồng thời hủy bỏ không bao giờ có cơ hội để chạy. Tôi đọc qua https://blogs.oracle.com/jonthecollector/entry/did_you_know có đề xuất bật CMSScavengeBeforeRemark, nhưng tác dụng phụ của việc tạm dừng có vẻ không lý tưởng. Bất cứ ai có thể đưa ra bất kỳ đề nghị?
Ngoài ra tôi đã tự hỏi nếu có ai đã có một tài liệu tham khảo tốt cho grokking các bản ghi CMS GC, đặc biệt dòng này:
[1 CMS-remark: 16015K(393216K)] 71979K(511232K), 0.0746640 secs]
Không rõ ràng về vùng những gì nhớ những con số này được đề cập đến. Sửa Tìm thấy một liên kết đến đây http://www.sun.com/bigadmin/content/submitted/cms_gc_logs.jsp
Thẻ cms được sử dụng để tham chiếu đến hệ thống quản lý nội dung, không phải nhãn đồng thời và GC quét. Tôi sẽ loại bỏ nó. –
Rất tiếc về điều đó, cảm ơn – jlintz
Bắt đầu CMS ở mức 50% có vẻ thấp với tôi: -XX: CMSInitiatingOccupancyFraction = 50 Có thể tăng (hoặc sử dụng mặc định là 'antispam') sẽ hoạt động khác. Ngoài ra, nhật ký của tôi thường có ParNew chạy chúng trước, trong và sau CMS. ParNew có đang chạy không? –