我正在使用Tomcat通过以下PermGen配置来部署Web应用程序:
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1536m -Xmx1536m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC"
我想知道以下几点:
还请注意,我有3个具有相同以前PermGen配置的Tomcat,它们在具有8 GB Ram的同一物理服务器上运行,这使我担心将PermGen最大大小增加到512MB不会影响物理服务器内存。
Tomcat中的Permgen OOME通常是由于以下两种情况的结合:
热调动。
内存泄漏,其中某些引用导致旧的类加载器及其所有相关对象保持可达。
因此,有两种方法可以避免此问题:
不要热调。或重新启动每几个热部署。
跟踪并修复与类加载器有关的存储泄漏。
增加permgen的大小并不能解决问题,但是可能会增加OOME问题之间的间隔。(或者允许您减少关闭/重新启动Tomcat的次数。)
你的问题:
1)是Tomcat使用的整个内存应该是256MB,还是Tomcat由于其他原因消耗了其他内存?
往上看。尽管Tomcat特别容易受此影响,但它并不是特定的Tomcat。(显然,由于我使用了动态代理,因此Hibernate可能也太…了。)
2)如何监视Tomcat使用的内存以避免达到PemGen最大大小?
有一些方法可以监视内存使用情况。例如附加代理。但是,这些不能解决问题。IMO,更改生产服务器的管理程序会更简单,因此您无需进行热重新部署。