gpt4 book ai didi

java - 建议的堆内存使用最大级别是多少?建议的垃圾收集时间?

转载 作者:行者123 更新时间:2023-12-02 14:46:40 28 4
gpt4 key购买 nike

我最近发现我的一项服务在垃圾收集上花费了大量时间,因为最大堆大小太小。该服务在我开始之前就已经存在,所以我不知道堆大小很小。我想设置一个警报,以在它恢复到某个点以上时向我发出警告,但我也不想为其提供比实际需要更多的资源。您认为对于垃圾收集和堆使用百分比而言,值得警惕的合理水平是多少?

我认为平均堆使用率的警报大约为 85%,GC 时间为 100 毫秒/5 分钟。

我知道这是基于要求和硬件的,但我确实在寻找一些基准或标准来做出决定。

最佳答案

亚历克斯·洛克伍德的回答是这样说的:

The recommended "max level" of heap memory usage and GC time is as little as possible.

这是误导性的。我实际上建议相反。尝试压缩堆大小是一个坏主意,因为这会导致您的应用程序更频繁地运行 GC,并且花费更少的时间(平均)来做有用的工作。

问题基本上是这样的。当 JVM 耗尽空间来分配对象时,就会运行经典(非并发)GC。然后它遍历非垃圾对象,将它们复制到不同的“空间”。运行 GC 周期的处理器时间在很大程度上取决于非垃圾量……但它实现的有用工作(它释放的空间量)与堆大小 - 非垃圾成正比。因此,当您压缩堆大小时,您会减少 GC 所做的有用工作量……对于相同的处理器时间消耗。

原来的问题是这样说的:

I was thinking that an alarm on average heap usage would be ~85 percent, and 100 ms of gc / 5 min.

在 GC CPU 使用率的绝对水平上设置监视器/警报可能没有用。 GC 时间取决于服务器 Activity 以及 GC 效率。您不希望每次服务器繁忙时 GC 警报都会响起。

85% 的平均堆使用率是值得警惕的合理水平,尽管再次将警报设置在固定水平可能会产生太多错误警报。

另一种方法是使用 JVM 选项来设置“GC 花费的时间百分比”阈值,并将其与“出现 OutOfMemoryException 时终止 JVM”选项结合起来,并在服务器的启动脚本中放置一个自动重新启动循环。然后监视重新启动。

关于java - 建议的堆内存使用最大级别是多少?建议的垃圾收集时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11054476/

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