Я борюсь с проблемой 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 классом для каждой. Что может вызывать постоянный рост памяти? Любая помощь будет очень признательна.
заранее спасибо, Лукаш