2010-06-15 21 views
12

Chúng tôi có một ứng dụng dựa trên Web Java chạy trên JBoss với kích thước tối đa cho phép là khoảng 1,2 GB (tổng bộ nhớ vật lý máy là 2 GB). Tại một số điểm ứng dụng dừng đáp ứng (cho khách hàng) trong vài phút. Sau khi phân tích một số, chúng tôi phát hiện ra rằng thủ phạm là toàn GC. Dưới đây là một đoạn trích từ nhật ký GC verbose:Toàn thời gian thực GC là nhiều hơn nữa mà người dùng + sys lần

74477,402: [Full GC [PSYoungGen: 3648K-> 0K (332160K)] [PSOldGen: 778476K-> 589497K (819200K)] 782124K-> 589497K (1151360K) [PSPermGen: 102671K-> 102671K (171328K)], 646,1546860 giây] [Times: user = 3,84 sys = 3,72, thực = 646,17 giây]

những gì tôi không hiểu là thế nào là nó có thể là thời gian thực chi tiêu cho toàn GC là khoảng 11 phút (646 giây), trong khi người dùng + sys lần chỉ là 7,5 giây. 7,5 giây âm thanh với tôi nhiều thời gian hợp lý hơn để chi tiêu để làm sạch < 200 MB từ thế hệ cũ. Tất cả thời gian khác đi đâu?

Cảm ơn rất nhiều.

Trả lời

10

Thời gian khác đi đâu?

Rất có thể ứng dụng của bạn đang gây ra sự cố bộ nhớ ảo. Về cơ bản, ứng dụng của bạn cần nhiều trang ảo hơn đáng kể so với các trang vật lý có sẵn để giữ chúng. Kết quả là, nó dành phần lớn thời gian chờ đợi cho các trang vm được đọc từ và ghi vào đĩa.

Để biết thêm thông tin, hãy đọc this wikipedia page.

Cách khắc phục là giảm mức sử dụng bộ nhớ ảo hoặc tăng lượng bộ nhớ vật lý trên hệ thống. Ví dụ, bạn có thể: ít

  • chạy các ứng dụng trên máy tính này,
  • giảm Java kích thước ứng dụng heap, hoặc
  • nếu bạn đang chạy trong một ảo, tăng phân bổ của ảo của bộ nhớ vật lý.

(Lưu ý rằng việc giảm kích thước heap JVM có thể là một thanh kiếm hai lưỡi. Nếu bạn giảm kích thước đống quá nhiều, ứng dụng sẽ chết vì lỗi OutOfMemoryEranks, dành quá nhiều thời gian thu gom rác hoặc không bị có thể lưu trữ mọi thứ một cách hiệu quả.)

+0

Một cách tiếp cận khác có thể làm giảm các đối tượng tồn tại lâu dài, vì các đối tượng sống ngắn sẽ được tái chế nhanh hơn nhiều. Đối tượng-Tạo nhóm ví dụ là một thực tế không tốt trong Java. –

+0

Đúng. Tôi đã tập trung vào những thứ mà OP có thể làm một cách nhanh chóng để giải quyết vấn đề. –

+0

Bạn có chắc chắn về điều này? Tôi sẽ mong đợi một quá trình JVM chờ đợi một pagein dành thời gian trong sys =. – eckes

Các vấn đề liên quan