生产服务器上的 Tomcat、PermGen 和重新部署

2022-09-02 04:36:18

它看起来像

 MemoryError: PermGen space
 java.lang.OutOfMemoryError: PermGen space

是一个常见问题。您可以增加烫发空间的大小,但是在重新部署100或200次后,它将已满。跟踪类加载器内存泄漏几乎是不可能的。

您在生产服务器上使用Tomcat(或另一个简单的servlet容器 - Jetty?)的方法是什么?每次部署解决方案后,服务器是否重新启动?

您是否将一只Tomcat用于许多应用程序?

也许我应该在不同的端口(或嵌入式码头)上使用许多Jetty服务器,并且每次都进行取消部署/重新启动/部署?


答案 1

我放弃了使用tomcat管理器,现在总是关闭tomcat来重新部署。

我们在同一台服务器上运行两个tomcats,并将apache Web服务器与mod_proxy_ajp,因此用户可以通过相同的端口80访问这两个应用程序。这也很好,因为当tomcat关闭时,用户会看到apache服务不可用页面。


答案 2

您可以尝试添加以下 Java 选项:

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

这将在 PermGen 空间中启用垃圾回收(默认情况下处于关闭状态),并允许 GC 卸载类。此外,您应该使用其他地方提到的 -XX:PermSize=64m -XX:MaxPermSize=128m 来增加可用的 PermGen 数量。


推荐