如何减少GC CPU使用率的波动

4
我有一个内存密集型的Java 8服务器应用程序,同时也需要低延迟。该应用程序在2.5G堆上运行良好,但每天都会出现垃圾收集器CPU使用率的峰值。
现在我想知道如何减少这些峰值。我可能无法减少内存使用量或增加更多内存。我对GC的平均CPU使用率没问题,我只想让CPU负载均匀分布在时间上。是否可能做到?

@JakubKubrynski 我有 -XX:+UseConcMarkSweepGC。这是你所指的吗? - Michael
2
@Michael,你可以检查一下-XX:+UseG1GC。并且请从GC日志中获取更多数据。很可能这些峰值是由于Full GC引起的。 - Jakub Kubrynski
@JakubKubrynski,您能否解释一下为什么我应该检查“-XX:+UseG1GC”吗? - Michael
@Michael,请将您的日志导入GC Viewer以查看详细信息。 - Jakub Kubrynski
@JakubKubrynski 哦,谢谢。 - Michael
显示剩余8条评论
1个回答

1
首先,您应该确保引入延迟的是 CPU 利用率而不是停止整个世界的暂停(例如,如果您使用 CMS,则为 Full GC)。

如果 Full GC 不是问题,那么您可以通过使用所有当前标志启动应用程序,然后附加 -XX:+PrintFlagsFinal 来检查其有效 VM 标志。

查找 ConcGCThreads 并查看是否减少该数字会产生所需的效果。它将使用更少的核心(但更多的墙时)进行并发循环。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接