Như được thấy bên dưới, ở giữa mọi thứ hoạt động như dự kiến hoạt động GC dừng lại trên thế giới mất +60 giây. Nó có thể được xác định là ngăn chặn thế giới trong toàn bộ thời gian, bởi vì các khách hàng (đất nung) bị bỏ rơi, phàn nàn nó (máy chủ đất nung) đã không phản hồi trong thời gian đó.Dài JVM phút GC
Đây là GC trẻ/nhỏ? Nếu có, nó có thể là do nạn đói trong thế hệ trẻ (eden + survivors?).
Chỉ 109333 (KB) miễn phí?
Tôi sẽ bắt đầu vẽ đồ thị các vùng chứa bộ nhớ khác nhau, bất kỳ đề xuất nào khác có thể được thực hiện để chẩn đoán thêm các vấn đề như thế này?
date, startMem=24589884, endMem=24478495, reclaimed=111389, timeTaken=0.211244 (1172274.139: [GC 24589884K->24478495K(29343104K), 0.2112440 secs])
date, startMem=24614815, endMem=24505482, reclaimed=109333, timeTaken=61.301987 (1172276.518: [GC 24614815K->24505482K(29343104K), 61.3019860 secs])
date, startMem=24641802, endMem=24529546, reclaimed=112256, timeTaken=2.68437 (1172348.921: [GC 24641802K->24529546K(29343104K), 2.6843700 secs])
Sun JVM là 1.6, sử dụng các cấu hình sau:
-Xms28672m -Xmx28672m -XX: + UseConcMarkSweepGC -XX: + PrintGCTimeStamps -XX: + PrintGC
Sane điều chỉnh cấu hình để gỡ lỗi thêm GC:
'-XX:+PrintGCDateStamps' Print date stamps instead of relative timestamps
'-XX:+PrintGCDetails' Will show what cpu went for (user, kern), gc algorithm used
'-XX:+PrintHeapAtGC' will show all of the heaps memory containers and their usage
'-Xloggc:/path/to/dedicated.log' log to specific file
Ứng dụng của bạn đang làm gì? GC jitter xảy ra khi số lượng lớn bộ nhớ đang được khai hoang từ đống trong nhiều lần quét, có khả năng là mỗi lần quét sẽ khiến nhiều đối tượng trở nên đủ điều kiện để thu thập, dẫn đến việc quét thêm. Ngay cả khi bạn chạy chương trình thứ hai, bạn vẫn có một khoảng thời gian rất lớn để GC thực hiện. Tôi nghĩ bạn sẽ thấy thay đổi cách ứng dụng của bạn đang xử lý các đối tượng, thay vì cấu hình JVM sẽ là đường dẫn bạn cần thực hiện. Bất kỳ ứng dụng nào cần giữ GC jitter xuống đều đang tìm cách sử dụng lại thay vì phải tái phân bổ các đối tượng. – codeghost
Đó là một phiên (cookie) lưu trữ. Các con số, ví dụ "khai hoang" cho thấy không có nhiều bộ nhớ thực sự được khai hoang. Nếu vậy nó khá thuận tiện để biết tại sao. Tôi đồng ý với bạn đầy đủ rằng nó cần phải được giải quyết trong cách xử lý các đối tượng (session), những gì chúng chứa ... Có một quá trình để xử lý các phiên tốt hơn, nhưng hiện tại tôi có công việc để tìm hiểu tại sao GC sẽ mất +60 giây và vẫn không có nhiều bộ nhớ hơn so với 0,2 giây trước đó. – user135361
Hãy xem blog này http://kirk.blog-city.com/why_do_i_have_this_long_gc_pause.htm có thể cung cấp cho bạn một vài gợi ý. – codeghost