我正在努力解决最近出现的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
但这只是一个临时解决方案,因为我很确定我们在这里面临一些内存泄漏。我们的应用程序的Web部分部署在jetty(jsf + icefaces)上。单击随机组件会增加使用的内存 - 我正在监视它 jstat -gcold
几乎每一次打击都意味着3-4kb以上。我已经添加 -XX:+TraceClassLoading
到jvm params并看到很多 sun.reflect.GeneratedConstructorAccessor
和 sun.reflect.GeneratedMethodAccessor
在Web用户界面上有任何操作时被记录。当使用99%的permgen时,我也进行了堆转储。我使用YourKit分析器来分析堆。在类加载器选项卡中有loaads sun.reflect.DelegatingClassLoader
每行有1个类的行。什么可能导致记忆不断增长?任何帮助将非常感激。
提前致谢, 卢卡斯