在Tomcat上使用Jenkins重新部署Grails应用程序会填充PermGen Space

时间:2012-02-22 15:49:41

标签: java tomcat grails memory-management permgen

目前,我们在Tomcat 6上部署Grails应用程序时遇到了各种问题,主要是关于内存使用问题和Jenkins的重新部署。

应用程序占用的内存越来越多,我们尝试使用CMSPermGenSweepingEnabled(我们使用UseConcMarkSweepGC)来解决这个问题,所以现在应该清理Groovy使用的临时类。

还有一个问题是,在每个Redeploy(使用jenkins)上,该应用程序需要大约150 MB的额外Permgen空间......任何想法如何避免这种情况?

我们使用的是Grail 1.3.7,我们当前的配置标志是

-Djava.util.logging.config.file=/var/lib/tomcat6/conf/logging.properties
-Djava.awt.headless=true
-Xms2048M
-Xmx2048M
-XX:MaxPermSize=1024m
-XX:PermSize=1024m
-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled
-XX:+UseConcMarkSweepGC
-Djava.net.preferIPv4Stack=true
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.endorsed.dirs=/usr/share/tomcat6/endorsed
-Dcatalina.base=/var/lib/tomcat6
-Dcatalina.home=/usr/share/tomcat6
-Djava.io.tmpdir=/tmp/tomcat6-tmp

2 个答案:

答案 0 :(得分:1)

非常popular tomcat issue,他们甚至有一些建议:http://wiki.apache.org/tomcat/OutOfMemory,但在大多数情况下,它仅适用于小型或完全控制的项目(意味着“没有任何外部库的项目”)。我见过的所有可靠项目都在tomcat下失败了,出现了这个错误:(

我的推荐 - 部署后重启Tomcat实例。

答案 1 :(得分:0)

我们在Tomcat上遇到过与Grails应用程序类似的问题。我们的解决方案与Igor建议的解决方案相同,在部署后重启Tomcat。

我们在群集中设置了两个生产服务器,因此它们共享会话。我们关闭一台服务器,取消部署应用程序,重新启动tomcat,部署新版本的应用程序,然后重新启动该服务器。然后在另一台服务器上重复该过程。到目前为止,这对我们有用。