4

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

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

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

如果它变得太满,那么 akill -9是必要的!

我可能会尝试使用 JRockit,但现在也不是一个选项。在生产环境中,我真的不认为每隔一段时间就必须反弹整个容器是可以接受的。

4

2 回答 2

2

Permgen 泄漏是一个问题,无论您在使用 grails 时使用的应用服务器是我的经验(高度个人化并且可能很容易争论的轶事,只是为了清楚这一点;))。

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

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

编辑:

在我看来,每个应用程序拥有一个 tomcat 实例还是很酷的!

于 2011-11-25T19:59:38.047 回答
1

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

于 2011-11-25T20:03:56.033 回答