gpt4 book ai didi

Java 堆 : What is limiting maximum old generation capacity?

转载 作者:行者123 更新时间:2023-11-30 09:02:54 25 4
gpt4 key购买 nike

我正在调查 EE 应用程序的性能问题,这可能是垃圾收集器未优化调整的结果。

在查看我在重负载下收集的 jstat 日志时,我偶然发现了以下发现:

S0     S1     E      O      P
7.39 0.00 41.81 88.89 53.93

NGCMN NGCMX NGC S0C S1C
131072.0 301056.0 301056.0 30080.0 30080.0

EC OGCMN OGCMX OGC
240896.0 1441792.0 2058240.0 2058240.0

根据官方 jstat 文档 here我们可以看到当前老年代大小 (OGC) 已经达到最大老年代大小 (OGCMX)。然而,第一行告诉我们“旧空间利用率占空间当前容量的百分比”(O)“仅”为 88%。

我的问题是:

  • 什么机制在 jstat 输出中将老年代限制设置为 OGCMX?
  • 是什么阻止旧空间增长和用完剩余的 ~12% 堆?

我们有 JVM 参数,它们设置总堆、新空间和永久空间的最小值/最大值(-Xms -Xmx -XX:NewSize -XX:MaxNewSize -XX:PermSize -XX:MaxPermSize).但是旧空间没有设置限制(我不知道这样的参数是否存在)。


编辑关于NewRatio:
这是我的理解,也提到了here JVM 不会强制执行新旧空间之间的比例,尤其是在使用 MaxNewSize 参数时。 MaxNewSize 参数接受,因为上面的值 (301056.0KB) 实际上恰好是我们为 MaxNewSize 指定的 294MB。此外,NewRatio 的默认值为 2(请参阅 here ),它根本不是 jstat 列出的上述任何值之间的比率。

最佳答案

我觉得这个问题非常重要。我一直在寻找完全相同的答案。就我而言,情况更糟。我们有 6GB 作为 Xmx,gccapacity 选项的输出显示它几乎使用了 100% 的内存:

[ec2-user@ip ~]$ sudo jstat -gccapacity 2416
OGCMX: 6121088.0
OGC: 6084776.0

以及 gcutil 选项的输出:

[ec2-user@ip ~]$ sudo jstat -gcutil 2416
S0 S1 E O P YGC
0.00 100.00 26.01 58.81 59.90 8555

这意味着它应该只使用大约 59% 的老一代。我不明白这一点。这意味着即使 JVM 没有使用它,它也会占用全部容量......

关于Java 堆 : What is limiting maximum old generation capacity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25844095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com