Tomcat7 OutOfMemoryError:永久空间

Tomcat7 OutOfMemoryError:永久空间,tomcat,grails,richfaces,tomcat7,Tomcat,Grails,Richfaces,Tomcat7,我有tomcat 7.0.47,在grails 2.3.7中有一个项目,在windows 2003的RichFaces 4.3.4中有两个项目server(2Gb RAM)。如果我在tomcat中加载了其中的两个,它们就会工作,但是如果我加载了所有的(3),我会看到permgenoutofmemory错误。 我尝试在tomcat中更改MaxPermSize,但没有得到结果。grails项目规模很大。我可以对项目做些什么来优化PermGet内存使用率吗 我将tomcat更改为GlassFish 3

我有
tomcat 7.0.47
,在
grails 2.3.7中有一个项目,在windows 2003的RichFaces 4.3.4中有两个项目
server
(2Gb RAM)
。如果我在tomcat中加载了其中的两个,它们就会工作,但是如果我加载了所有的(3),我会看到permgen
outofmemory错误。
我尝试在tomcat中更改
MaxPermSize,但没有得到结果。grails项目规模很大。我可以对项目做些什么来优化PermGet内存使用率吗


我将
tomcat
更改为
GlassFish 3.1.2
。现在所有项目都有足够的内存了。但是我的Grails项目中的EasyRig插件有问题。

没有。您的系统资源不足。在Java的内存模型中,永久性生成是类、方法和其他永久性事物所在的位置。为了减少PermGen容量,您需要减少永久应用程序成员。在2gb内存上,您将很难做到这一点


祝你好运

Java应用程序只允许使用有限的内存。特定应用程序可以使用的确切内存量在应用程序启动期间指定。为了使事情更加复杂,Java内存被划分为不同的区域,其中一个区域名为permgen,在本例中您已经耗尽了

“java.lang.OutOfMemoryError:PermGen space”的主要原因是:将太多的类或太大的类加载到永久生成中。在您的情况下,我怀疑您是否真的成功地将2GB的数据加载到了PermGen中,但我怀疑是您拼错了属性(-XX:MaxPermSize)在您的Tomcat配置中,或者Tomcat根本不接受此配置

您可以通过将jconsole附加到Tomcat进程来验证配置更改是否被拾取,类似于以下示例:

my-machine me$ jps
3160 Jps
1514 org.apache.catalina.startup.Bootstrap
my-machine me$ jconsole 1514

导航到VM summary选项卡,您应该会看到Tomcat实例实际使用的参数。

我认为2GB对于3个项目来说应该足够了。想想您想要什么;您的JVM告诉您的是事实:-)我同意Daniel的观点,您应该使用任何工具(如JConsole)在运行时检查JVM内存消耗,您将得到答案