gpt4 book ai didi

java - 如何调整更频繁地发生的 Java 主要垃圾收集

转载 作者:行者123 更新时间:2023-11-30 11:46:22 26 4
gpt4 key购买 nike

我有一台服务器只运行一些无法访问用户的进程。因此,吞吐量无关紧要。大多数时候,服务器只运行一些小作业,所以它大部分时间主要做次要 gc。偶尔会有一项大工作进来,因此需要一个主要的 gc 来为进程腾出空间。我见过这样的情况,就像几天没做过大型 gc 一样。

我的问题是当主要的 gc 运行时,它会暂停,并触发健康检查警报。我们试图降低堆大小,问题消失了,因为主要事件发生得更多。然而,当一个大作业到来时,它会耗尽内存。我们不想增加健康检查的超时时间,因此我们希望调整 gc 以让主要 gc 更频繁地发生,即使堆大小更大,而不是在需要时等待。我打算更改为使用 -XX:+UseConcMarkSweepGC 以使其暂停影响较小。我还应该尝试其他任何 JVM 选项吗?

最佳答案

我们在使用 -XX:+UseParallelGC 选项时遇到了这样的问题,但发现这是因为该比率远远超过旧的。这意味着我们有一个很大的老一代和一个太小的新一代。对象不会在新对象中停留足够长的时间以被移除,因此旧对象会慢慢填满,从而导致大量收集。

将新比率设置得更高帮助了我们 (-XX:NewRatio=2)。我不记得我们使用的值,但认为它是 2 或 3 - 试一试。
这会设置一个更大的新生代,这样短命的对象就有机会在被迫进入老年代之前被移除。

关于java - 如何调整更频繁地发生的 Java 主要垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9826953/

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