有没有办法防止Grails permgen在tomcat上的生产模式下重新部署泄漏,尽管有JVM标志

时间:2011-11-25 17:38:14

标签: tomcat grails permgen

这是一个熟悉的老问题,但我真的想让它一劳永逸地上床睡觉!我已经设置了以下JVM标志:

-XX:+ CMSClassUnloadingEnabled -XX:+ CMSPermGenSweepingEnabled -Dorg.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES = true

但我仍然观察到每个部署周期的permgen使用量增加了50Mbs。我正在使用tomcat管理器应用程序进行远程部署,并且grails处于生产模式。

如果它太满了则需要杀死-9!

我可能会尝试使用Jrockit,但现在也不是一个选择。我不觉得在生产环境中每隔一段时间就必须反弹整个容器。

2 个答案:

答案 0 :(得分:2)

Permgen泄漏是一个问题,无论您使用grails时使用的是什么appserver都是我的经验(非常个人化,可能很容易受到攻击的轶事,只是为了清楚;)。

如果这是您部署的唯一应用,为什么不只是shutdown.sh,删除webapp文件夹,投入战争然后启动.sh?

这是我们的方式,重新部署只会增加大约7秒(其中5个是sleep 5,以确保catalina在重新启动之前完全关闭)。

编辑:

在我看来,每个应用程序有一个tomcat实例非常酷!

答案 1 :(得分:1)

您可能没有意识到这一点,但只要您反复热部署到Tomcat实例,permgem最终会发生,因为有些类永远无法正确卸载(由于类的编程方式,或者对Tomcat的某些限制)无论你使用哪种参数,都不能重启。