问题描述
ZGC 运行不够频繁。 GC 日志显示它为我的应用程序每 2-3 分钟运行一次,因此,我的内存使用率在 GC 周期之间变得很高(高达 90%)。 GC 后,它下降到低至 20%。
如何提高 GC 运行的频率以更频繁地运行?
解决方法
-XX:ZCollectionInterval=N
- 将集合之间的最大间隔设置为 N 秒。-XX:ZUncommitDelay=M
- 将未使用的内存返回给操作系统的延迟设置为 M 秒。
在调整 GC 之前,我建议调查发生这种情况的原因。您的应用程序中可能存在一些问题/错误。
[关于 GC 的一些注意事项]
-
-XX:ZUncommitDelay=M
(检查您的 linux 内核是否支持) -
-XX:+ZProactive
:在使用 ZGC 时启用主动 GC 周期。默认情况下,启用此选项。如果预计 ZGC 对正在运行的应用程序的影响最小,则 ZGC 将启动主动 GC 周期。如果应用程序大部分时间处于空闲状态或分配的对象很少,但您仍然希望减小堆大小并允许引用处理发生时,即使堆上有大量可用空间,这也很有用。
有关 ZGC 配置的更多详细信息。可以找到选项: