OutOfMemory PermGen空间

时间:2013-10-30 22:05:27

标签: java rmi permgen

我在运行应用程序时遇到OutOfMemory:PermGen空间错误。简要说明:

从源代码运行时不会发生错误,但是当我从部署的.jnlp启动器运行时会发生错误。 在通过RMI从我们公司数据库检索数据的屏幕中发生错误。 从源代码和启动器运行都使用相同的RMI URL。 从源代码和启动器运行都使用相同的Java版本(6_38)。 该应用程序托管在OC4J 10.1.3中。 发生错误时,它不仅会杀死我的应用程序,还会杀死Java控制台。

我在应用程序服务器控件中的服务器属性中添加了以下选项,如其他一些问题所示,但无济于事。

-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled

java控制台中记录的错误就是这样,取自跟踪文件:

Couldn't process record:
java.lang.OutOfMemoryError: PermGen space
    at sun.misc.Unsafe.defineClass(Native Method)
    at sun.reflect.ClassDefiner.defineClass(Unknown Source)
    at sun.reflect.MethodAccessorGenerator$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.reflect.MethodAccessorGenerator.generate(Unknown Source)
    at sun.reflect.MethodAccessorGenerator.generateSerializationConstructor(Unknown Source)
    at sun.reflect.ReflectionFactory.newConstructorForSerialization(Unknown Source)
    at java.io.ObjectStreamClass.getSerializableConstructor(Unknown Source)
    at java.io.ObjectStreamClass.access$1500(Unknown Source)
    at java.io.ObjectStreamClass$2.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.io.ObjectStreamClass.<init>(Unknown Source)
    at java.io.ObjectStreamClass.lookup(Unknown Source)

我不确定其他哪些信息可能会有所帮助,我不知道如何继续。欢迎任何指导。

2 个答案:

答案 0 :(得分:1)

如果Web应用程序中有ClassLoader / PermGen泄漏,您可以使用ClassLoader Leak Prevention library删除它们。

如果您想要追踪泄漏事件,this blog series会有所帮助。

答案 1 :(得分:0)

首先尝试增加你的烫发大小,因为默认值通常太低(主要是64位jvms)。

所需的论据是-XX:PermSize-XX:MaxPermSize

通常需要256M的最大值。