这是一个熟悉的老问题,但我真的想让它一劳永逸地上床睡觉!我已经设置了以下JVM标志:
-XX:+ CMSClassUnloadingEnabled -XX:+ CMSPermGenSweepingEnabled -Dorg.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES = true
但我仍然观察到每个部署周期的permgen使用量增加了50Mbs。我正在使用tomcat管理器应用程序进行远程部署,并且grails处于生产模式。
如果它太满了则需要杀死-9!
我可能会尝试使用Jrockit,但现在也不是一个选择。我不觉得在生产环境中每隔一段时间就必须反弹整个容器。
答案 0 :(得分:2)
Permgen泄漏是一个问题,无论您使用grails时使用的是什么appserver都是我的经验(非常个人化,可能很容易受到攻击的轶事,只是为了清楚;)。
如果这是您部署的唯一应用,为什么不只是shutdown.sh,删除webapp文件夹,投入战争然后启动.sh?
这是我们的方式,重新部署只会增加大约7秒(其中5个是sleep 5
,以确保catalina在重新启动之前完全关闭)。
编辑:
在我看来,每个应用程序有一个tomcat实例非常酷!
答案 1 :(得分:1)
您可能没有意识到这一点,但只要您反复热部署到Tomcat实例,permgem最终会发生,因为有些类永远无法正确卸载(由于类的编程方式,或者对Tomcat的某些限制)无论你使用哪种参数,都不能重启。