Nguyên nhân gây ra lỗi PermGen OutOfMemory là do các ứng dụng lại. Nguyên nhân cơ bản là các đối tượng Class bị rò rỉ trong PermGen từ các bản hợp đồng.
Tất nhiên, cách giải quyết là khởi động lại JVM sau một số lần tái cấu trúc nhất định.
Đây là một vấn đề rất khó giải quyết hoàn toàn, mặc dù với một số điều tra, bạn thường có thể thực hiện những cải tiến lớn. Đây là nơi bạn bắt đầu: Khi ứng dụng web của bạn bị dừng, hãy đảm bảo rằng:
- tất cả các chủ đề mà bạn bắt đầu đã dừng lại
- tất cả các ThreadPool mà bạn bắt đầu đều bị tắt
- tất cả các tham chiếu tĩnh mà bạn có thể phát hành được phát hành
Đây là một số điều có thể khiến một đối tượng Class bị mắc kẹt trong PermGen.
Ngoài ra, lưu ý rằng không phải tất cả các JVM (hoặc tất cả các phiên bản của JVM) sẽ là các đối tượng Lớp GC trong PermGen. Nếu bạn đang chạy JVM hoặc một phiên bản của JVM sẽ không phải là các đối tượng Lớp GC trong PermGen, thì lựa chọn duy nhất của bạn là khởi động lại JVM sau một số lần tái cấu trúc nhất định. Điều này có thể không áp dụng cho bạn, với các tùy chọn JVM mà bạn đề cập.