应用程序运行时PermGen空间错误

时间:2013-07-10 05:19:32

标签: java tomcat permgen

我的Web应用程序在tomcat apache-tomcat-6.0.35上运行,并且它在任何问题上运行良好。但是今天我在catalina.out日志中显示以下异常并且无法登录系统。

Jul 9, 2013 2:40:15 PM org.apache.coyote.http11.Http11Processor process
SEVERE: Error processing request
java.lang.OutOfMemoryError: PermGen space

我的印象是,部署或重新部署应用程序时可能会出现此异常。但是当应用程序运行时没有任何问题我得到了这个。这可能是什么原因。请提供建议

6 个答案:

答案 0 :(得分:2)

Tomcat中的每个webapp都有一个单独的类加载器,它有一组单独的加载类。当我们启动Tomcat时,它不会立即加载所有应用程序的所有类,而是延迟加载应用程序。当应用程序变为活动状态时,它会开始加载其类,并且可能会发生JVM耗尽permgen空间。也就是说,即使不重新部署应用程序,也可能会发生这种情况。

答案 1 :(得分:1)

JVM启动时添加这些Optionsto Tomcat命令行或添加到IDE VM Options

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

OR

-XX:MaxPermGen=128M

答案 2 :(得分:1)

听起来你的一个webapps消耗了大量内存。你试过提高PermGen的尺寸吗?在$ CATALINA_HOME / bin / catalina.sh中,您可以添加

-XX:PermSize=512m -XX:MaxPermSize=512m

到你的JAVA_OPTS,以便它分配足够的空间来运行。

答案 3 :(得分:1)

您将离开permGen空间,尝试在tomcat启动脚本上更改此参数

<强> /etc/init.d/tomcat6

JAVA_OPTS="-Djava.awt.headless=true -XX:MaxPermSize=512M"

根据需要设置内存量。

答案 4 :(得分:1)

这肯定是在部署期间经常出现的错误。我已经看到它在Grails和Java应用程序中都出现过很多次。您可以通过调整JVM启动参数-XX:MaxPermSize来增加permgen空间,即:

-XX:MaxPermSize=256m

此主题详细介绍了该问题:Thread

答案 5 :(得分:1)

几天前我犯了这个错误。我通过重新启动真机来修复它 - 部署时出现了问题。

您也可以通过添加

来解决此问题
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 
-server -Xms1536m -Xmx1536m
-XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m 
-XX:MaxPermSize=256m -XX:+DisableExplicitGC"

请参阅possible fix