【问题标题】:Performance Metrics to choose garbage collector选择垃圾收集器的性能指标
【发布时间】:2019-04-01 17:28:19
【问题描述】:

在选择垃圾收集器时我应该衡量什么?

就我而言,我正在尝试比较吞吐量收集器与 G1GC 的性能,不太确定在做出最终决定之前应该寻找什么。我知道查看垃圾收集器花费了多少时间听起来是个好主意,但它可能可能不会影响我的应用程序性能。 (仅供参考 - 从 Java 8 迁移到 Java 11)

【问题讨论】:

    标签: java garbage-collection java-11 g1gc


    【解决方案1】:

    JVM中不同的GC是针对不同的用例设计的:

    1. 吞吐量 - 并行
    2. 延迟 - CMS
    3. 可预测性 - G1,ZGC

    一旦您知道您正在寻找这些用例中的哪些,您就可以获取相关指标,例如测量吞吐量收集器的平均暂停时间是没有意义的,最好查看收集所花费的总时间。

    将并行收集器与 G1 进行比较是没有意义的,它们是为不同的用例而设计的。如果您必须快速处理批量数据,请使用 Parallel。如果您的应用程序必须在工作负载期间做出响应,请使用 G1。

    【讨论】:

    • CMS 在上面的列表中属于什么位置?
    • CMS 面向延迟,但比 G1 更难预测。 G1 在 Java 11 中进行了优化,应该具有与 CMS 相似的最坏情况延迟,但也有更一致的暂停时间,并且更容易调整。通常最好获得稍低但一致的延迟,从而在 PROD 上节省很多问题。
    • 我明白了。感谢您的回复。您能否详细说明可预测性?是不是,我们可以控制 gc 应该停止世界多长时间和多少次?
    • 如果您知道预期的 GC 暂停时间(最多 100 毫秒),您可以说请求 SLA 将在特定时间(最多 500 毫秒)。如果 GC 暂停没有可预测性,您可能会有 10 秒的 GC 暂停,这将破坏请求的 SLA。
    • 指标并不总是那么简单。例如,String Deduplication 仅适用于 G1 收集器,可能会对性能产生间接影响,从而产生比 Parallel 更好的吞吐量。当然,这取决于特定的应用程序及其字符串。
    猜你喜欢
    • 2013-04-20
    • 2012-04-02
    • 2011-03-18
    • 2012-10-03
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    相关资源
    最近更新 更多