我一直在努力解决内存消耗问题,我的tomcat在任务管理器中的内存使用情况在我对webapp的每个请求上都在不断增加。我已经读过任务管理器中的mem用法并不一定意味着存在问题,因为它总结了JVM的堆,非堆和本机内存;但是我仍然不确定为了自动减少堆内存消耗需要做些什么。
我在tomuts2框架上使用tomcat 7.0.62和JRE1.8.0_51以及hibernate3 / c3p0应用程序。
在过去的几个月里,我们增加了应用程序的功能,起初我虽然是内存泄漏,但每次我们按下"执行GC"在jconsole中的按钮中,堆内存在图中下降,因此tomcat进程的mem使用量停止增长。
到目前为止,我已经设置了以下属性:
-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控制台中,配置如下:
提前致谢。
答案 0 :(得分:1)
启动JVM时可以设置许多不同的垃圾收集器。默认情况下,如果系统上存在负载且仍有空闲内存,则gc不会考虑运行。如果要查看垃圾收集的行为方式,请使用-verbosegc。您可以在启动时设置最大堆使用率(-Xmx),并且gc将更频繁地启动。
如果服务器正在运行其他程序并且它们正在缺乏内存,我建议只担心它。您现在拥有的设置是利用可用资源提供最佳的tomcat性能。