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