Netflix使用ZGC实现低延迟

💡 原文中文,约1100字,阅读约需3分钟。
📝

内容提要

Netflix使用ZGC实现低延迟,超过一半的关键流视频服务现在都在带有Generational ZGC的JDK 21上运行。与G1相比,ZGC改善了平均延迟和P99延迟,且CPU利用率相同或更高。在大型预计算工作负载中,使用ZGC后,应用程序吞吐量提高了6-8%,批处理时间缩短了一个小时。

🔎

延伸解读

ZGC在Netflix的落地规模

Netflix已将超过一半的关键流视频服务迁移到JDK 21,并默认启用分代ZGC。这一规模表明ZGC已通过生产环境验证,能够支撑核心业务。对于考虑类似迁移的团队,Netflix的实践提供了参考:在JDK 21及以上版本中,ZGC可作为低延迟场景的默认选择。

延迟与吞吐的权衡

ZGC将GC暂停控制在亚毫秒级,显著改善了平均延迟和P99延迟,且CPU利用率与G1相当或更高。但在大型预计算工作负载中,ZGC反而提升了6-8%的吞吐量,并缩短批处理时间一小时。这说明ZGC并非只擅长低延迟,在特定场景下也能兼顾吞吐。

并非所有工作负载都适合ZGC

Netflix指出没有最好的垃圾收集器,选择需在吞吐量、延迟和资源利用率之间权衡。对于分配率极高、长时间运行且对象保留时间不可预测的任务,G1可能更注重吞吐量。一些批处理/预计算案例默认使用G1,但并行收集器的吞吐量可能更好。

JVM调优实践

Netflix分享了使用大页面的JVM设置:将堆最小值和最大值设为相等,配置-XX:+UseTransparentHugePages和-XX:+AlwaysPreTouch,并调整透明大页参数。这些优化有助于发挥ZGC的性能优势,减少内存管理开销。

❓

Q&A

Netflix为什么选择使用ZGC而不是G1?

Netflix选择使用ZGC是因为其并发垃圾收集的显著优势,能够显著改善平均延迟和P99延迟。

ZGC的GC暂停时间通常是多少?

ZGC的GC暂停时间通常低于一毫秒。

使用ZGC后,应用程序的吞吐量提高了多少?

使用ZGC后,应用程序吞吐量提高了6-8%。

在大型预计算工作负载中,ZGC的优势是什么?

在大型预计算工作负载中,ZGC使批处理时间缩短了一个小时。

选择垃圾收集器时需要考虑哪些因素?

选择垃圾收集器时需在吞吐量、应用延迟和资源利用率之间进行权衡。

哪些工作负载不适合使用ZGC?

一些批处理/预计算案例可能更适合使用G1,因为G1在吞吐量方面表现更好。

🏷️

标签

➡️

继续阅读