【发布时间】:2011-07-01 06:20:32
【问题描述】:
我正在努力解决最近出现的 outOfMemory PermGen 问题。出现错误时保存的日志sn-ps之一:
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 参数中,当 Web 用户界面上有任何操作时,会看到许多 sun.reflect.GeneratedConstructorAccessor 和 sun.reflect.GeneratedMethodAccessor 被记录。当使用 99% 的 permgen 时,我还进行了堆转储。我使用 YourKit profiler 来分析堆。在类加载器选项卡中有 sun.reflect.DelegatingClassLoader 行的负载,每个行有 1 个类。什么可能导致内存不断增长?任何帮助将不胜感激。
提前致谢, 卢卡斯
【问题讨论】:
-
MaxPermGen 增加之前的值是多少?
-
JVM 使用其默认值 84mb。
标签: java jsf memory-leaks icefaces permgen