Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OutOfMemory PermGen空间_Java_Rmi_Permgen - Fatal编程技术网

Java OutOfMemory PermGen空间

Java OutOfMemory PermGen空间,java,rmi,permgen,Java,Rmi,Permgen,运行应用程序时,我遇到了OutOfMemory:PermGen空间错误。简要说明: 从源代码运行时不会发生错误,但从部署的.jnlp启动器运行时会发生错误。 错误发生在通过RMI从公司数据库检索数据的屏幕上。 从源代码运行和从启动器运行都使用相同的RMI url。 从源代码运行和从启动器运行都使用相同的Java版本(6_38)。 该应用程序托管在OC4J 10.1.3中。 当错误发生时,它不仅会杀死我的应用程序,还会杀死Java控制台 我已经在应用服务器控件的服务器属性中添加了以下选项,正如在其

运行应用程序时,我遇到了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)
无法处理记录:
java.lang.OutOfMemoryError:PermGen空间
在sun.misc.Unsafe.defineClass(本机方法)
在sun.reflect.ClassDefiner.defineClass(未知源)上
在sun.reflect.MethodAccessorGenerator$1.run处运行(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
在sun.reflect.MethodAccessorGenerator.generate处(未知源)
位于sun.reflect.MethodAccessorGenerator.generateSerializationConstructor(未知源)
在sun.reflect.ReflectionFactory.newConstructorForSerialization(未知源)处
位于java.io.ObjectStreamClass.getSerializableConstructor(未知源)
位于java.io.ObjectStreamClass.access的$1500(未知来源)
位于java.io.ObjectStreamClass$2.run(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.io.ObjectStreamClass。(未知源)
位于java.io.ObjectStreamClass.lookup(未知源)

我不确定还有什么其他信息可能有用,我不知道如何继续。欢迎提供任何指导。

首先尝试增加您的perm大小,因为默认值通常太低(主要用于64位JVM)

需要的参数是
-XX:PermSize
-XX:MaxPermSize


最大值256M通常是足够的。

如果web应用程序中存在ClassLoader/PermGen泄漏,则可以使用


如果你想追踪泄漏,你自己会帮上忙。

不幸的是,现在已经是2.56亿了。从我所读到的内容来看,听起来好像我在某个地方有内存泄漏,但是错误消息在这方面没有帮助(至少对我来说)。该应用程序是一个继承的应用程序,我的工作场所不再雇用任何原创作者。我确实尝试将其提升到5.12亿,只是为了看看。它并没有阻止错误的发生,但它确实导致应用程序冻结并更平稳地消亡,这就是原因。如果它确实是内存泄漏,您可以使用以下两个参数:
-XX:+heapdumponautofmemoryError-XX:HeapDumpPath=path_to_file
,它将在异常发生时转储内存内容(将路径设置为文件)。然后,您可以使用类似于打开创建的文件的应用程序来查看问题所在。但请注意,这不是一项容易的任务。谢谢您,@Farid。看来我将度过一段愉快的时光。我将继续并将此标记为答案,因为从我阅读的内容来看,这是大多数情况下的答案。