Java Class (PermGen) Утечка Памяти (Веб - Приложения) - Общее Решение?

У меня есть утечка памяти perm gen, которую я знаю. Профилирование с помощью jvisualvm показывает, что при выполнении горячего развертывания (например, остановка и запуск приложения без убийства JVM, в tomcat, WebSphere, WebLogic и т. д.) - пространство PermGen постоянно увеличивается.

после чтения, используя jhat и другие расширенные инструменты, я понял, что у меня, вероятно, есть ссылка на WebAppClassLoader из класса где-то в родительском классе погрузчиков.

Я не мог определить это, хотя я сделал некоторые массивные запросы на основе JavaScript на jhat

нет ли простой утилиты, которая выясняет, кто несет ответственность за то, чтобы загрузчик классов не был собран мусор (таким образом, позволяя сборку мусора классов, загруженных им)?

Я пробовал JProfiler, jvisualvm, jhat и много Google

для всех друзей LMGTFY-я провел около полутора дней, читая форумы с пошаговыми инструкциями, не повезло. Я ищу утилиту или код, который выходы:

объект X класса Y является единственным корнем GC, который удерживает ваши классы от удаления.

4 ответов


есть unsatisfiying но простое решение: не hotdeploy в производственных средах. Вы можете настроить кластер из двух контейнеров сервлетов и обновлять их по одному за раз с перезапуском.


реалии частого перераспределения... Лучшее, что вы можете сделать, это увеличить размер perm gen, используя-XX:MaxPermSize=256m. Это может купить вам некоторые перераспределения больше за перезапуск jvm. Или читайте дальше в http://my.opera.com/karmazilla/blog/2007/03/15/permgen-strikes-back

остерегайтесь, что если загрузчики классов не могут быть gc-ed вообще, возня с jvm не поможет вообще. Вам лучше забыть о частых развертываниях, особенно в производстве, для dev это удобно, тем не менее.


Я использовал метод с этого сайта и это помогло. http://www.mkyong.com/tomcat/tomcat-javalangoutofmemoryerror-permgen-space/


несколько указателей здесь, а также, http://minmaxmim.blogspot.com/2010/01/javalangoutofmemoryerror-java-heap.html

также проверьте статью javalangoutofmemoryerror-permgen-space.