目前,我使用以下jvm参数在Tomcat7中运行应用程序:
-Dcatalina.home=E:\Tomcat
-Dcatalina.base=E:\Tomcat
-Djava.endorsed.dirs=E:\Tomcat\endorsed
-Djava.io.tmpdir=E:\TomcatE\temp
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=E:\Tomcat\conf\logging.properties
-XX:MaxPermSize=512m
-XX:PermSize=512m
-XX:+UseConcMarkSweepGC
-XX:NewSize=7g
-XX:MaxTenuringThreshold=31
-XX:CMSInitiatingOccupancyFraction=90
-XX:+UseCMSInitiatingOccupancyOnly
-XX:SurvivorRatio=6
-XX:TargetSurvivorRatio=90
-verbose:gc -XX:+PrintGCDetails
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCDateStamps
-Xloggc:E:\Tomcat7\gc.log
我使用CMS作为垃圾收集器,这种行为似乎非常奇怪。即使有13 7GB的老一代,当执行一个主要的收集(我猜是90%的占用空间-> -XX:CMSInitiatingOccupancyFraction=90),内容管理系统不能清理大量的对象(仍然占用空间至少7 7GB)。我不相信应用程序有这么多长生命周期的对象(不确定!)。CMS不是应该释放更多的空间吗?或者可能与碎片化有关?
由于这种行为,我有频繁的不育系cycles...that,我想减少。
即使使用低暂停GC,有时应用程序也会停止15-30秒...如何减少CMS中的暂停时间?有更多的JVMS而不是有20 of堆的JVMS是不是一个好主意?
非常感谢
发布于 2018-11-25 10:59:22
首先,您可以使用以下命令转储堆转储文件:
jmap -heap:live heap.bin ${pid}
命令,并通过mat查找长寿对象
其次,因为堆大小大于8G,并且您可以尝试垃圾优先(G1)收集器
https://stackoverflow.com/questions/20861110
复制相似问题