一尘不染

Tomcat内存使用情况(PermGen)

tomcat

我正在使用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"

我想知道以下几点:

  1. Tomcat使用的全部内存是否应为256MB,还是Tomcat由于其他原因而占用其他内存?
  2. 如何监视Tomcat使用的内存以避免达到PemGen最大大小?

还请注意,我有3个具有相同以前PermGen配置的Tomcat,它们在具有8 GB
Ram的同一物理服务器上运行,这使我担心将PermGen最大大小增加到512MB不会影响物理服务器内存。


阅读 196

收藏
2020-06-16

共1个答案

一尘不染

Tomcat中的Permgen OOME通常是由于以下两种情况的结合:

  • 热调动。

  • 内存泄漏,其中某些引用导致旧的类加载器及其所有相关对象保持可达。

因此,有两种方法可以避免此问题:

  • 不要热调。或重新启动每几个热部署。

  • 跟踪并修复与类加载器有关的存储泄漏。

增加permgen的大小并不能解决问题,但是可能会增加OOME问题之间的间隔。(或者允许您减少关闭/重新启动Tomcat的次数。)


你的问题:

1)是Tomcat使用的整个内存应该是256MB,还是Tomcat由于其他原因消耗了其他内存?

往上看。尽管Tomcat特别容易受此影响,但它并不是特定的Tomcat。(显然,由于我使用了动态代理,因此Hibernate可能也太…了。)

2)如何监视Tomcat使用的内存以避免达到PemGen最大大小?

有一些方法可以监视内存使用情况。例如附加代理。但是,这些不能解决问题。IMO,更改生产服务器的管理程序会更简单,因此您无需进行热重新部署。

2020-06-16