为什么在我按下 Perform GC with jconsole 之前 tomcat 内存使用率会更高?

Why is tomcat memory usage going higher until I press Perform GC with jconsole?

我一直在与内存消耗问题作斗争,我的 tomcat 在任务管理器中的内存使用量在我向我的 webapp 发出的每个请求中不断增加。我读到任务管理器中的 mem 使用并不一定意味着有问题,因为它总结了 JVM 的堆内存、非堆内存和本机内存;但是我仍然不确定究竟需要做什么才能自动减少堆内存消耗。

我在 struts2 框架上使用 tomcat 7.0.62 和 JRE1.8。0_51 和 hibernate3/c3p0 应用程序。

在过去的几个月里,我们增加了应用程序的功能,起初我以为这是内存泄漏,但每次我们在 jconsole 中按下 "Perform GC" 按钮时,堆内存都会在图表中下降,因此,tomcat 进程的内存使用量停止以之前的速度增长。

到目前为止,我已经设置了以下属性:

-Dcatalina.home=C:\apache-tomcat-7.0.62
-Dcatalina.base=C:\apache-tomcat-7.0.62
-Djava.endorsed.dirs=C:\apache-tomcat-7.0.62\endorsed
-Djava.io.tmpdir=C:\apache-tomcat-7.0.62\temp
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=C:\apache-tomcat-7.0.62\conf\logging.properties
-Dcom.sun.management.jmxremote.port=6060
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-XX:+UseParNewGC
-XX:SurvivorRatio=128
-XX:MaxTenuringThreshold=0
-XX:+UseTLAB
-XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled

是否缺少您推荐的任何配置参数。 在我的tomcat7w控制台配置如下:

提前致谢。

有许多不同的垃圾收集器可以在 JVM 启动时设置。默认情况下,gc 不会考虑 运行 如果系统上有负载并且仍有空闲内存。如果您想查看垃圾收集的行为方式,请使用 -verbosegc。您可以在启动时设置最大堆使用量 (-Xmx),gc 将更频繁地启动。

我建议仅在服务器是 运行 其他程序并且它们内存不足时才担心它。您现在的设置正在提供可用资源所能提供的最佳 tomcat 性能。