10

我需要帮助来了解我从中获取的与 GC 相关的数字如何与jmapjstat传递给 java 的设置相关联。我在具有 16GB 内存的服务器上使用以下设置启动应用程序 (solr):

-XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled
-Xms12144m -Xmx12144m
-XX:NewRatio=4 -XX:SurvivorRatio=8 -XX:+UseCompressedOops

的输出jmap开始:

并发 Mark-Sweep GC

堆配置:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize = 12733906944 (12144.0MB)
   新大小 = 2686976 (2.5625MB)
   MaxNewSize = 130809856 (124.75MB)
   OldSize = 5439488 (5.1875MB)
   新比率 = 4
   幸存者比率 = 8
   PermSize = 21757952 (20.75MB)
   MaxPermSize = 176160768 (168.0MB)

为什么NewSize, MaxNewSize, OldSize, 和PermSize都那么小,而MaxHeapSize是大的?不应该NewSize + OldSize = heap size吗?总堆大小不应该接近MaxHeapSize吗?为什么设置为 4时NewSize正好是一半?OldSizeNewRatio

其余的jmap输出如下。它与上述内容相匹配,并且包含一个concurrent mark-sweep generation我也不知道如何解释的部分。

此外,GC 日志表明“所需的幸存者大小”为 6.2MB,这也很奇怪,因为我知道-XX:SurvivorRatio=8应该使幸存者空间为NewSize.

最后,我只在我的 GC 日志中看到ParNew消息,我知道这是 Eden 的 GC。

堆使用:
新一代(伊甸园 + 1 个幸存者空间):
   容量 = 117768192 (112.3125MB)
   使用 = 20402232 (19.45708465576172MB)
   免费 = 97365960 (92.85541534423828MB)
   17.324059793666528% 已使用
伊甸空间:
   容量 = 104726528 (99.875MB)
   使用 = 16408336 (15.648208618164062MB)
   免费 = 88318192 (84.22679138183594MB)
   15.667793359863893% 已使用
从太空:
   容量 = 13041664 (12.4375MB)
   使用 = 3993896 (3.8088760375976562MB)
   免费 = 9047768 (8.628623962402344MB)
   30.624128945508794% 已使用
到太空:
   容量 = 13041664 (12.4375MB)
   使用 = 0 (0.0MB)
   免费 = 13041664 (12.4375MB)
   0.0% 已使用
并发标记扫描生成:
   容量 = 12603097088 (12019.25MB)
   使用 = 7903352408 (7537.22420501709MB)
   免费 = 4699744680 (4482.02579498291MB)
   62.70960505037411% 已使用
烫发一代:
   容量 = 45903872 (43.77734375MB)
   使用 = 27759192 (26.473228454589844MB)
   免费 = 18144680 (17.304115295410156MB)
   60.472441191889% 已使用
4

1 回答 1

3

当 MaxHeapSize 很大时,为什么 NewSize、MaxNewSize、OldSize 和 PermSize 都那么小?

尺寸只是它们需要的大小。如果您生成更多的短期垃圾,NewSize 会更大(我不知道 MaxNewSize 是如何设置的,但它通常比我设置的要小)

并发标记清除生成

这具有capacity= 最大大小、used= 已使用、free= 容量 - 已使用。

我的 GC 日志中的 ParNew 消息,据我所知是 Eden 的 GC。

正如您所指出的,新空间很小,因此经常清理,而旧空间很大,因此很少清理。

于 2012-08-06T14:48:06.470 回答