首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使ZGC经常运行

使ZGC经常运行
EN

Stack Overflow用户
提问于 2021-07-09 21:38:07
回答 3查看 749关注 0票数 1

ZGC运行得不够频繁。GC日志显示,它每2-3分钟为我的应用程序运行一次,因此,在GC循环之间,我的内存使用率很高(高达90%)。GC后降至20%。

如何提高GC运行频率,使运行频率更高?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-07-10 07:41:06

-XX:ZCollectionInterval=N -将集合之间的最大间隔设置为N秒。

-XX:ZUncommitDelay=M -将延迟设置为M秒,直到未使用的内存返回到操作系统。

票数 3
EN

Stack Overflow用户

发布于 2021-07-14 06:46:12

在对GC进行调优之前,我建议研究一下发生这种情况的原因。您的应用程序中可能有一些问题/错误。

关于GC的几点注记

  • -XX:ZUncommitDelay=M (检查你的linux内核是否支持它)
  • -XX:+ZProactive:在使用ZGC时启用主动GC周期。默认情况下,启用此选项。如果这样做对运行中的应用程序的影响最小,ZGC将启动一个积极的GC周期。如果应用程序大部分是空闲的,或者分配的对象很少,那么这是非常有用的,但是您仍然希望保持堆的大小,并允许引用处理发生,即使堆上有很多空闲空间。

有关ZGC配置的更多细节。可以找到备选方案:

票数 1
EN

Stack Overflow用户

发布于 2021-09-02 10:05:46

目前( JDK 17),ZGC的主要策略是等待堆填充的最后一刻,然后进行收集。它的目标是

  • 通过只在必要时运行GC来避免不必要的CPU负载。
  • 足够早地启动GC,以便在堆实际填满之前完成(因为堆填充会很糟糕,从而导致临时应用程序停滞)。

它通过测量应用程序分配内存的速度、GC运行所需的时间以及预测应该在什么时候启动GC来实现这一点。您可以在源代码中找到确切的算法。

ZGC还公开了一些用于更频繁地运行GC的旋钮(即主动操作),但老实说,我并不认为它们非常有效。您可以在我的其他答案中找到更多的信息。G1在积极主动方面做得更好,但这是否好取决于您的用例。(听起来您更关心吞吐量而不是内存使用,所以我认为您应该更喜欢ZGC的行为。)

但是,,如果您发现ZGC在预测堆什么时候会填满,并且您的应用程序真的处于停滞状态时,请在这里或在ZGC邮件列表中共享这些信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68322932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档