java.lang.OutOfMemoryError: Пространство PermGen при использовании веб-приложений

Я борюсь с проблемой outOfMemory PermGen, которая появилась недавно. Один из фрагментов журнала, который был сохранен при появлении ошибки:

java.lang.OutOfMemoryError: PermGen space
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
        at org.apache.felix.framework.ModuleImpl$ModuleClassLoader.findClass(ModuleImpl.java:1872)
        at org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:720)
        at org.apache.felix.framework.ModuleImpl.access$300(ModuleImpl.java:73)
        at org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1733)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

Я увеличил максимальный допустимый размер -XX: MaxPermGen = 128m , но это временное решение, потому что я почти уверен, что мы сталкиваемся с некоторыми утечка памяти здесь. Веб-часть наших приложений размещается на пристани (jsf + icefaces). Щелчок по случайным компонентам увеличивает используемую память - я отслеживаю это с помощью jstat -gcold , и почти каждое нажатие означает на 3-4 КБ больше. Я добавил -XX: + TraceClassLoading в параметры jvm и увидел множество sun.reflect.GeneratedConstructorAccessor и sun.reflect. GeneratedMethodAccessor регистрируется при любом действии в веб-интерфейсе пользователя. Еще я сделал дамп кучи при использовании 99% пермгена. Я использовал профилировщик YourKit для анализа кучи. Во вкладке загрузчика классов есть загруженные строки sun.reflect.DelegatingClassLoader с 1 классом для каждой. Что может вызывать постоянный рост памяти? Любая помощь будет очень признательна.

заранее спасибо, Лукаш

11
задан Shervin Asgari 21 February 2011 в 13:44
поделиться