[转帖]谈 JVM 参数 GC 线程数 ParallelGCThreads 合理性设置

jvm,参数,gc,线程,parallelgcthreads,合理性,设置 · 浏览次数 : 0

小编点评

**ParallelGCThreads 参数** **参数说明:** `ParallelGCThreads` 是用于指定并发垃圾回收线程数的参数。 **参数值:** * **默认值:**根据逻辑核数 `ncpus` 计算:`8 * (ncpus - 8) * 5 / 8` * **范围:**8至容器核数 **作用:** `ParallelGCThreads` 参数控制了并行垃圾回收线程的数量。在 `ParallelGCThreads` 设置成 `N` 时,JVM 将使用 `N` 个线程进行垃圾回收。 **冲突:** `ParallelGCThreads` 参数设置过大可能会影响性能,因为这会增加线程切换开销。 **实验建议:** * 在生产环境中,通常要根据业务需求设置 `ParallelGCThreads` 参数。 * 在 `JRE` 1.8.0_131 版本之前,明确指定 `ParallelGCThreads` 参数可能导致性能问题。 * `ParallelGCThreads` 参数的最佳值取决于应用程序的性能需求。 **示例:** ```java -XX:ParallelGCThreads=8 ``` **注意:** * `ParallelGCThreads` 参数仅用于 `PS MarkSweep/PS Scavenge` 和 `ConcurrentMarkSweep/ParNew` 等并发垃圾回收算法中。 * 对于 `G1` 算法,`ParallelGCThreads` 参数没有影响。

正文

https://my.oschina.net/u/4090830/blog/7926038

 

1. ParallelGCThreads 参数含义

在讲这个参数之前,先谈谈 JVM 垃圾回收 (GC) 算法的两个优化标的:吞吐量和停顿时长。JVM 会使用特定的 GC 收集线程,当 GC 开始的时候,GC 线程会和业务线程抢占 CPU 时间,吞吐量定义为 CPU 用于业务线程的时间与 CPU 总消耗时间的比值。为了承接更大的流量,吞吐量越大越好。

为了安全的垃圾回收,在 GC 或者 GC 某个阶段,所有业务线程都会被暂停,也就是 STW(Stop The World),STW 持续时间就是停顿时长,停顿时长影响响应速度,因此越小越好。

这两个优化目标是有冲突的,在一定范围内,参与 GC 的线程数越多,停顿时长越小,但吞吐量也越小。生产实践中,需要根据业务特点设置一个合理的 GC 线程数,取得吞吐量和停顿时长的平衡。

目前广泛使用的 GC 算法,包括 PS MarkSweep/PS Scavenge, ConcurrentMarkSweep/ParNew, G1 等,都可以通过 ParallelGCThreads 参数来指定 JVM 在并行 GC 时参与垃圾收集的线程数。该值设置过小,GC 暂停时间变长影响 RT,设置过大则影响吞吐量,从而导致 CPU 过高。

2. ParallelGCThreads 参数设置

GC 并发线程数可以通过 JVM 启动参数: -XX:ParallelGCThreads=<N> 来指定。在未明确指定的情况下,JVM 会根据逻辑核数 ncpus,采用以下公式来计算默认值:

◦当 ncpus 小于 8 时,ParallelGCThreads = ncpus

◦否则 ParallelGCThreads = 8 + (ncpus - 8) ( 5/8 )

一般来说,在无特殊要求下,ParallelGCThreads 参数使用默认值就可以了。但是在 JRE 版本 1.8.0_131 之前,JVM 无法感知 Docker 的 CPU 限制,会使用宿主机的逻辑核数计算默认值。 比如部署在 128 核物理机上的容器,JVM 中默认 ParallelGCThreads 为 83,远超过了容器的核数。过多的 GC 线程数抢占了业务线程的 CPU 时间,加上线程切换的开销,较大的降低了吞吐量。因此 JRE 1.8.0_131 之前的版本,未明确指定 ParallelGCThreads 会有较大的风险。

3. ParallelGCThreads 参数实验

创建 8C12G 容器,宿主机是 128C。模拟线上真实流量,采用相同 QPS,观察及对比 JVM YoungGC,JVM CPU,容器 CPU 等监控数据。场景如下:

◦场景 1: JVM ParallelGCThreads 默认值,QPS = 420,持续 5 分钟,CPU 恒定在 70%

◦场景 2: JVM ParallelGCThreads=8,QPS = 420,持续 5 分钟,CPU 恒定在 65%

◦场景 3: JVM ParallelGCThreads 默认值,QPS 瞬时发压到 420,前 1min CPU 持续 100%

◦场景 4: JVM ParallelGCThreads=8,QPS 瞬时发压到 420,前 2s CPU 持续 100%,后面回落

从监控数据来看,各场景下 CPU 差距较明显,特别是场景 3 和场景 4 的对比。场景 3 由于 GC 线程过多,CPU 持续 100% 时长达 1 分钟。可以得出以下两个结论:

1. 修改 ParallelGCThreads = 8 后,同等 QPS 情况下,CPU 会降低 5% 左右

2. 修改 ParallelGCThreads = 8 后,瞬间发压且 CPU 打满情况下,CPU 恢复较快

3-9.png

10.png

图 1: 容器 CPU 对比图:场景 3 (上) 和场景 4 (下)

11.png 12.png 图 2: JVM Young GC 对比图:场景 3 (上) 和场景 4 (下)

4. ParallelGCThreads 修改建议

ParallelGCThreads 配置存在风险的应用,修改方式为以下两种方案(任选一种):

◦升级 JRE 版本到 1.8.0_131 以上,推荐 1.8.0_192

◦在 JVM 启动参数明确指定 -XX:ParallelGCThreads=<N>,N 为下表的推荐值:

容器核数248163264
推荐值 2 4 8 13 23 43
建议上下界 1~2 2~4 4~8 8~16 16~32 32~64

与[转帖]谈 JVM 参数 GC 线程数 ParallelGCThreads 合理性设置相似的内容:

[转帖]谈 JVM 参数 GC 线程数 ParallelGCThreads 合理性设置

https://my.oschina.net/u/4090830/blog/7926038 1. ParallelGCThreads 参数含义 在讲这个参数之前,先谈谈 JVM 垃圾回收 (GC) 算法的两个优化标的:吞吐量和停顿时长。JVM 会使用特定的 GC 收集线程,当 GC 开始的时候,GC

【转帖】再谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP

https://www.zhoulujun.cn/html/theory/ComputerScienceTechnology/network/2015_0708_65.html 长文是对TCP IP的街剖析归类总结,就自己的经验再次回顾IP协议而写的归纳性笔记,助力初学者掌握。文有不妥之处,请查看原

[转帖]陈巍谈芯:一图看懂芯片禁令的目的、范围和影响

https://zhuanlan.zhihu.com/p/572905835 陈巍谈芯:让你一图看懂某国芯片禁令的目的、范围和影响。 感觉这回是“芯片战争”,影响全球半导体产业链。但也是有方法减少影响的。

[转帖]陈巍谈芯:NLP里比BERT更优秀的XLNet长什么样?

https://zhuanlan.zhihu.com/p/447836322 ​ 目录 收起 一、XLNet的优势 1)独得AR与AE两大绝学 2)集成了Tansformer-XL 二、XLNet的结构特点 1) 置换语言模型(PermutationLanguage Modeling,PLM) 2)

[转帖]电脑硬件入门——基础之计算机架构

https://zhuanlan.zhihu.com/p/63322067 谈电脑硬件的文章很多,但一般是从电脑有哪些配件说起。这篇文章我尝试从架构方面来阐述,希望更有助于萌新对电脑的各种配件的作用进行理解吧。 1、冯·诺依曼架构[1] 现代计算机,常见的有两种架构,其中一种是冯·诺依曼架构。先看图

[转帖]读Brendan Gregg - 谈性能分析

https://zhuanlan.zhihu.com/p/206743670 Brendan Gregg何许人 Brendan Gregg在性能分析工业界如雷贯耳, 相信看到这篇文章的人肯定知道他的大名. 我们看一下他自己写的bio, 这里摘取的是short版本: Brendan Gregg is

[转帖]玩火的容器内存控制 CGroup - 容器基础拾遗 Part 1

https://www.modb.pro/db/555818 引 我们在谈容器内存时,到底在谈什么? CGroup 内存说明 强制回收内存 memory.force_empty 基于内存阈值水位的通知 不要 OOM Kill,只是暂停 memory.stat memory.usage_in_byte

[转帖]阿里达摩院最新存算芯片技术解读

https://zhuanlan.zhihu.com/p/448261354 陈巍谈芯: 12月3日,阿里达摩院成功研发新型架构芯片,已经被证明能够在阿里推荐系统中发挥极大的应用价值,并受到技术圈的普遍关注。 据悉这颗芯片与数据中心的推荐系统对于带宽/存储的需求完美匹配,大幅提升带宽的同时还实现了超

[转帖]三星研发出首个基于存算一体技术的GPU大型计算系统 (收录于存算一体芯片赛道投资融资分析)

https://zhuanlan.zhihu.com/p/591850021 陈巍谈芯:产业巨头已经打通存算一体技术的落地通道,存算一体技术加快应用部署。与未使用HBM-PIM(HBM-PIM GPU v.s. HBM GPU)相比,仅用20nm工艺就使7nm集群计算性能提升了2.5倍。这个思路也是

[转帖]ChatGPT发展历程、原理、技术架构详解和产业未来 (收录于先进AI技术深度解读)

https://zhuanlan.zhihu.com/p/590655677 陈巍谈芯::本文将介绍ChatGPT的特点、功能、技术架构、局限、产业应用、投资机会和未来。作者本人曾担任华为系自然语言处理( NLP )企业的首席科学家。 ChatGPT的关键改进可以参考paper:Augmenting