繁体   English   中英

G1GC非常高的GC数和CPU,非常频率的GC会破坏性能

[英]G1GC very high GC count and CPU, very frequency GCs that kill performance

我最近将我的Java应用程序从CMS + ParNew切换到了G1GC。 我在切换时观察到的是CPU使用率更高,GC计数+暂停时间也增加了。 切换前我的JVM标志是

 java -Xmx22467m -Xms22467m -XX:NewSize=11233m -XX:+UseConcMarkSweepGC -XX:AutoBoxCacheMax=1048576 -jar my-application.jar

切换后我的标志是:

java -Xmx22467m -Xms22467m -XX:+G1GC -XX:AutoBoxCacheMax=1048576 -XX:MaxGCPauseMillis=30 -jar my-application.jar

我遵循了Oracle的最佳实践http://www.oracle.com/technetwork/tutorials/tutorials-1876574.html

Do not Set Young Generation Size

并没有设定年轻一代的规模。 但是我怀疑年轻一代是这里的问题。 我看到的是堆使用量在~6 - 8 GB之间波动。 堆使用情况

以前,使用CMS和Par New,内存使用量增长到4-16 GB之间,然后才看到GC: 在此输入图像描述

我不确定我理解为什么使用G1GC GC会如此频繁。 我不确定在使用G1GC进​​行GC调整时我缺少什么。

我正在使用Java 8:ava版本“1.8.0_144”Java(TM)SE运行时环境(版本1.8.0_144-b01)Java HotSpot(TM)64位服务器VM(版本25.144-b01,混合模式)

我感谢您的帮助。

更新 :有关这些暂停的更多信息: 在此输入图像描述 你可以看到所有这些停顿都是G1New,看起来它们和我的目标暂停时间一样长,即30ms。 当我在切换到G1GC之前查看ParNew暂停时,这就是它的样子: 在此输入图像描述 因此它们也都是年轻的gen集合(ParNew),但它们不那么频繁和更短,因为它们只在堆使用量达到14GB左右时发生(根据图表)

我仍然无能为力为什么G1New如此早发生(就堆使用而言)

更新2我还注意到NewRatio = 2,我不知道G1GC是否尊重这一点,但这意味着我的新Gen上限为7GB。 这可能是原因吗?

更新3添加G1GC GC日志: https ://drive.google.com/file/d/1iWqZCbB-nU6k_0-AQdvb6vaBSYbkQcqn/view?usp = sharing

GC日志显示平均GC暂停间隔为2秒,每个间隔大约30-40ms,相当于应用程序吞吐量约95%。 这并不等于“杀死性能”领域。 至少不是由于GC暂停。

但是,G1会执行更多的并发工作,例如,为了记住集合细化,您的暂停似乎在更新/扫描RS中花费一些时间,因此我假设并发GC线程也很忙,即它可能需要在GC暂停之外的额外CPU周期,这是默认情况下,日志未涵盖,您需要+G1SummarizeRSetStats 如果延迟更重要,您可能希望为机器分配更多内核,如果吞吐量更重要,您可以调整G1以在暂停期间执行更多RS更新(以增加暂停时间为代价)。

我能够看到复制对象所花费的时间非常重要。 在对象被提升为Tenured Generation之前,看起来G1GC默认有15代。 我把它减少到1( -XX:MaxTenuringThreshold=1

此外,我不知道如何在日志中确认它,但是可视化GC日志我看到年轻一代正在不断调整大小,从最小尺寸到最大尺寸。 我缩小了范围,也提高了性能。

看这里https://docs.oracle.com/javase/9​​/gctuning/garbage-first-garbage-collector-tuning.htm#JSGCT-GUID-70E3F150-B68E-4787-BBF1-F91315AC9AB9我试图找出是否粗糙确实是个问题。 但它只是说设置gc + remset = trace我不明白如何在命令行中传递给java,如果它甚至可以在JDK 8中使用,我增加了XX:G1RSetRegionEntries以防万一。

我希望它对未来的G1GC调谐器有所帮助,如果其他人有更多的建议会很棒。

我仍然看到[Processed Buffers]在年轻的疏散中仍然需要很长时间,并且[Scan RS]在混合收藏中很长。 不知道为什么

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM