解决“java.lang.OutOfMemoryError: PermGen space”错误

1242

最近我在我的web应用程序中遇到了这个错误:

java.lang.OutOfMemoryError: PermGen space

这是一个典型的Hibernate/JPA + IceFaces/JSF应用程序,在Tomcat 6和JDK 1.6上运行。 显然,这可能会在多次重新部署应用程序后发生。

这是什么原因造成的?如何避免它?如何解决这个问题?


我已经为此奋斗了数小时,但是我没有好消息。请参阅我的相关问题:https://dev59.com/anI-5IYBdhLWcg3wJE0K 您可能仍然存在内存泄漏,例如类没有被垃圾回收,因为您的WebAppClassLoader没有被垃圾回收(它具有未清除的外部引用)。增加PermGen只会延迟OutOfMemoryError,并且允许类垃圾回收是一个前提条件,但如果它们的类加载器仍然有引用,则不会垃圾回收类。 - Eran Medan
我在添加display taglib时遇到了这个错误。删除它也解决了这个错误。为什么会这样? - masT
你是怎么遇到它的? - Thorbjørn Ravn Andersen
15
使用JDK 1.8:þ 欢迎来到MetaSpace。 - Rytek
如果使用Windows操作系统,请按照以下说明进行操作,而不是尝试在配置文件中手动设置标志。这样可以正确地将值设置在注册表中,在运行时由Tomcat调用。http://stackoverflow.com/questions/21104340/increase-windows-installer-based-tomcat-permgen-space - Entree
34个回答

1

您也可以通过以下方式解决此问题:

rm -rf <tomcat-dir>/work/* <tomcat-dir>/temp/*

清空“work”和“temp”目录可以让Tomcat进行干净的启动。

0
如果有人在Netbeans中遇到相同的错误,那么这里是我解决它的方法。
在Netbeans中:
转到服务选项卡 -> 右键单击服务器 -> 选择属性 -> 转到平台选项卡 -> 在vm选项内输入-Xms1024m
在我的情况下,我已经给出了-Xms4096m。
这里是截图:

enter image description here


0

增加 Tomcat 内存

无论您在哪里使用 Tomcat,都可以前往 C:\Program Files\Apache Software Foundation\Tomcat 9.0\bin 文件夹,并运行 tomcat9w 或您所使用的任何版本。

然后按照图片进行操作。

enter image description here

将128更改为1024,同时将最大值更改为1024或更高,根据您的需要。


0
如果在尝试调试 JBoss 应用程序时遇到 IntelliJ 中的相同问题: 我刚刚在运行/调试配置中的 VM 选项中添加了 -XX: MaxPermSize = 128m。您可以将其增加到 256m,以更有保证地使其工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接