【问题标题】:G1's ParallelGCThreadsG1 的 ParallelGCThreads
【发布时间】:2019-01-28 16:23:55
【问题描述】:

最近,我正在转向 jvm 选项以提高性能。 当我学习 GC 选项ParallelGCThreads 时,我遇到了问题。

我认为ParallelGCThreads的最佳值是逻辑处理器的数量。但是在我的32核机器上,默认值是23。从oracle的文章Garbage First Garbage Collector Tuning中,它告诉然后处理器数量超过8,默认值ParallelGCThreads 是处理器的 5/8。
那么,为什么是 5/8 而不是 8/8?

【问题讨论】:

  • 您希望所有逻辑核心都运行 GC?你到底为什么想要那个?你想让你的 CPU 工作还是收集垃圾?
  • 是的,更多的 cpu 做 gc 导致停止世界的时间更少
  • CPU 执行实际工作的时间也更少。使用所有核心进行垃圾收集将是一个愚蠢的默认设置。
  • 但是此时核心数小于等于8,gc线程默认计数为核心数。
  • @Kayaman 他说的是ParallelGCThreads,而不是ConcGCThreads

标签: java garbage-collection g1gc


【解决方案1】:

This hotspot-gc-dev thread 暗示在非常大的 CPU 或多 CPU 系统上,您从额外线程中获得的收益递减,因此线性缩放因子减少到超过 8 个内核。

这很可能是因为 GC 本质上是受内存限制的,足够多的线程最终会使内存总线饱和,无法提供额外的内核。此外,GC 线程之间的协调(工作分区)可能会变得更加低效,因为每个线程只能在堆的一小部分上工作。

无论如何,这不是一刀切的规则,因此您可以更改设置,对其进行衡量,如果您可以确认改进,则保留更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 2017-05-24
    • 2021-12-03
    相关资源
    最近更新 更多