【发布时间】:2014-12-23 20:18:21
【问题描述】:
关于 HotSpot JVM 垃圾收集的一些问题。
我们有一个 java 进程正在运行,选项是:
-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps
-Xloggc:/mnt/dfs/0/hdfs/logs/namenode.gc.log -XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=512M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled -XX:-DisableExplicitGC -XX:+UseCMSCompactAtFullCollection
-XX:+CMSClassUnloadingEnabled -XX:+UseCMSInitiatingOccupancyOnly -server -Xmx92160m -Xms92160m
-Xss256k -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=15 -XX:+PrintTenuringDistribution
如您所见,最大堆大小约为 90G。
根据this article,默认NewRatio=2和SurvivorRatio=8。所以伊甸园 size应该是90G*1/3*8/10=24G,survivor size应该是90G*1/3*1/10=3G。
但实际上,当我使用 jstat 时:
sudo jstat -gcnew 37082
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
48960.0 48960.0 0.0 5981.3 15 15 24480.0 391936.0 82332.7 13351 1379.450
Eden 大小只有 390MB 左右,幸存者大小只有 48MB。这会导致很多年轻的gc。
谁能告诉我为什么伊甸园这么小?
【问题讨论】:
-
我知道默认情况下所有代大小都在动态调整。由于您的任何选择似乎都无法改变这一点,因此这可能也是您应该拥有的。我建议使用 VisualGC 来监控它(它是 VisualVM 的一个可选插件)。
标签: java garbage-collection jvm jvm-hotspot