2010-07-26 31 views
9

Tôi đang xem xét các tùy chọn khác nhau xung quanh bộ sưu tập rác trên máy ảo Java 6 18 và muốn một số con trỏ.Các tùy chọn khác nhau để giải quyết các vấn đề PermGen

Chúng tôi chạy ứng dụng của chúng tôi trên JBoss, và đôi khi có lỗi PermGen khét tiếng trong quá trình redeploys. Có rất nhiều thông tin xung đột và lỗi thời trên internet về cách tốt nhất để giải quyết hoặc giảm nhẹ vấn đề này.

Từ what I can see, sau đây là đúng:

  • tùy chọn VM tự mình sẽ không giải quyết được vấn đề này, chỉ trì hoãn nó. Cách duy nhất đáng tin cậy để khắc phục sự cố này là sửa lỗi mã hóa trong chính Máy chủ ứng dụng (không) hoặc mã (thư viện của chúng tôi hoặc thư viện của bên thứ ba) đang chạy trong Máy chủ ứng dụng (nhiều khả năng). Việc điền vào Permgen thường là kết quả của các tham chiếu từ các đối tượng được nạp bởi trình nạp lớp ứng dụng tới các đối tượng được nạp bởi trình nạp lớp Máy chủ ứng dụng, do đó ngăn chặn việc thu gom rác của trình nạp lớp của ứng dụng.

Tôi đã hai câu hỏi phát sinh từ này:

  1. là đúng trên?
  2. Các tùy chọn VM CMSClassUnloadingEnabledCMSPermGenSweepingEnabled là gì? Từ những gì tôi có thể thấy CMSClassUnloadingEnabled supercedes hoặc ngầm cho phép CMSPermGenSweepingEnabled. Một trong hai người trong số họ có giúp được vấn đề trên không?

Trả lời

6

Thật không may, câu trả lời là:

  1. Những lựa chọn VM sẽ chỉ trì hoãn vấn đề.

Vấn đề cơ bản là GC sẽ không thu gom rác một đối tượng có thể tiếp cận mạnh. Bạn cần phải tìm ra lý do tại sao những trình nạp lớp ứng dụng cũ vẫn có thể truy cập được sau khi triển khai lại ... và sửa lỗi rò rỉ.

Hoặc, từ bỏ việc triển khai lại trên máy chủ sản xuất của bạn hoặc khởi động lại vùng chứa web (ví dụ: JBoss) thường xuyên hơn.

+0

+1 khi tắt triển khai nóng trên máy chủ sản xuất. Trên thực tế tôi có xu hướng làm điều này cho tất cả mọi thứ nhưng môi trường làm việc của nhà phát triển. –

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