2

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

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

仍然存在的问题是,在每次重新部署(使用 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
4

2 回答 2

1

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

我的建议 - 部署后重新启动 Tomcat 实例。

于 2012-02-22T16:08:34.390 回答
0

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

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

于 2012-02-22T17:13:27.133 回答