导读
Tencent Kona JDK11正式开源,腾讯云与大数据团队将持续贡献Java生态发展。
https://github.com/Tencent/TencentKona-11
概述
2021-03-08,腾讯宣布将 Tencent Kona JDK11 正式开源,向社区分享经过内部超大规模生产环境验证的定制 JDK,该版本在启动性能、峰值性能以及事物处理能力方面,相对于前一版本 Kona JDK8 都有了综合性提升,沉淀了腾讯云与大数据团队在大数据/机器学习、云原生场景下的深度优化,并且通过了 JCK 验证,确保充分的 Java SE 标准兼容。
除了在开源社区开放使用外,Tencent Kona JDK11 也会在腾讯云上免费提供,为云上用户的 Java 应用注入高效动能。另一方面,通过自身产品采用 Kona JDK,腾讯云也能够为用户带来更好的云服务能力。
作为 Java 生态的基础引擎,JDK 包括了 Java 运行环境、Java 工具,以及 Java 核心类库。目前,基于 OpenJDK 开源项目(Java SE 最主流的参考实现之一),国际厂商研发了多种 JDK 发行版,腾讯 Kona JDK 便是其中颇具特色的发行版之一。
高效可靠 开箱即用的 JDK11 开源版本
为了给用户更好的 JDK11 版本,降低使用维护成本,腾讯云与大数据团队在 Kona JDK11 中,坚持了一贯的兼容性、可靠性、安全、性能优化等核心要素,同时,重点对 ZGC 等核心特性进行了生产级别改进,做到了开箱即用,其中包括:
- 向量计算(Vector API)。针对大数据、机器学习场景的“算力”优化需求,让 JVM 应用可以充分利用 SIMD 能力,移植并改进了社区前沿版本中的 Vector API 技术,解决了 avx512 向量可靠性等生产障碍,研发了向量移位寄存器分配等深度优化,并且已经 upstream 大量相关优化到 OpenJDK 主分枝。
- 开箱即用的 ZGC。作为 Java 生态翘首以待的“无暂停” GC 算法之一,ZGC 有望提供大部分情况下毫秒级停顿水平,极大提高 Java 在线服务场景生产力,但由于可靠性和功能的不足,某种程度上减慢了 JDK 11 采纳速度。Kona JDK 补齐了社区 JDK 11 的能力短板,让 Java 开发者不必纠结于选择 LTS 还是非 LTS 版本,降低升级负担。
- 超大堆和内存成本优化策略。面对从轻量级微服务,到多个超 TB 级大堆的严苛生产环境要求,Kona JDK 11 沉淀了相关 GC、SVC 工具等生产级别优化。
2019年11月,腾讯云与大数据团队开源了 Tencent Kona JDK8,为微服务、云原生应用、大数据等实际应用场景提供最优的 Java 生产环境及解决方案,并为开发者开发的 Java 应用提供平滑的迁移。目前,Kona 为腾讯云微服务平台 TSF、腾讯大数据、消息队列 TDMQ、消息队列CKafka、智能钛机器学习平台 Ti-One、大数据套件 TBDS、专有云 TCE 等大规模产品提供了稳定保障。
通过工业标准 Benchmark 表明,Kona JDK11 对比 Kona JDK8 大多数场景在峰值性能上具有非常明显的提升,个别性能提升接近 50%。目前,Kona JDK11 通用版本目前已经在腾讯内部和云上规模使用,用户只需要少量迁移工作,即可实现其在 Kona JDK11 版本的编译和运行。
对于广大的 Java 使用者来说,是时候认真考虑从8升级到Kona 11 等新 LTS 版本了。据了解,相当一部分 Java 用户,在升级 JDK 11、采用前沿特性上面临不小的难度,腾讯云与大数据团队将对外开源生产级别 ZGC 等能力,将大数据、广告、游戏、金融、云安全网关等多个场景的生产实践,分享给广泛 Java 开发者,助力用户解决升级 JDK 的顾虑。
JDK 11通用场景性能表现如何?
首先,这个问题众说纷纭,也有人在自己的benchmark中得到JDK 8性能最好的结论,我们还是通过一些工业标准benchmark的数据说话,总体来说大多数场景Kona JDK 11对比Kona JDK 8,具有非常明显的性能提升,请看下面简单的性能对比数据。
Specjvm2008峰值性能对比
Specjbb2015 max-jOPS性能对比
Specjbb2015 critical-jOPS性能对比
腾讯大数据Hermes产品 + Kona 11通用版本
Benchmark中看到的性能指标变化,能否真正落实到产品中呢?腾讯大数据Hermes等产品团队采纳了Kona JDK 11,同等硬件环境、同样JVM参数、不做代码改进的性能结果,这个数据非常能够说明Kona JDK的通用性能价值。
典型查询SQL的查询耗时表现(越低越好)
AVG/Min/Max查询耗时对比(越低越好)
总体来说,简单的JDK版本升级即在该场景获得了10+%的性能提升!
Kona 11向量计算版本揭秘
在公司广告等核心业务中,性能/算力不仅仅意味着单位计算资源能够处理更多的业务流量,也深刻影响着我们能够扩展探索的模型复杂度等能力范围,但是,摩尔定律某种程度上在今天已经失效,CPU Core的频率已经多年基本上没有明显上升,免费的性能提升逐步消失,还有哪些性能优化空间可以挖掘呢?
数据并行化!
以大数据场景为例,算力提升依赖于机器(集群)、线程(多核)和指令(SIMD)三种层次的并行计算。分布式集群和多线程大家非常熟悉,也必不可少,但JVM层面在指令级别的优化往往被忽略,而充分利用SIMD是算力的倍增器之一。
JVM向量化/SIMD通常有三种手段:
● 直接使用native语言编写,然后在Java中通过JNI调用,这种方式比较普遍,但因为CPU和计算环境的多变而非常难以开发和维护,相当于抛弃了JVM的效率优势。并且,单纯静态编译因缺少运行时Profile信息,很难进行一些动态编译的优化措施,相当于放弃了部分优化空间,业界探索多年的PGO(Profile-Guided Optimization,也叫FGO/FOGO...),生产实践中大多也不那么香。
● 自己做JVM Intrinsic级别优化,这很cool,但坦白说对普通开发者基本不现实;
● 更加可行的是利用JVM JIT编译器提供的自动向量化(Auto-Vectorization)能力。但是,不仅仅是Java语言,自动向量化技术自身多年来始终没有太大突破,比如Hotspot JVM中,目前仅在C2编译器提供 SupperWord Optimization,依赖于条件苛刻的循环优化等技术,开发维护有难度且脆弱。
目前,OpenJDK前沿版本中孵化的Vector API技术,提供超高性能的同时,保持着Java/JVM平台开发/维护效率的优势,开发者可以用普通Java API的方式编码,无需担忧晦涩的底层研发。不足之处则是,孵化项目在生产落地间存在着版本鸿沟,很难想象生产负载直接升级到开发中的JDK 15上,社区也不会对该版本进行长期支持,另外孵化项目真正到生产实践,仍然存在一些技术问题。
腾讯JDK团队,将Vector API技术引入到Kona 11中,修复了众多孵化项目在生产环境的JVM问题,大幅降低CPU指令级别优化的生产落地难度,提供了大数据/机器学习场景的极致性能,同时提供长期支持版本的定期更新维护,解决业务团队的后顾之忧。
目前我们也逐步将部分修复回馈到了OpenJDK社区的前沿版本,让整个社区受益。
持续贡献,坚持良性回馈开源
从2019年12月正式参与 OpenJDK 社区贡献开始,腾讯云与大数据团队一直秉承着贡献于 Java 的长期成功的原则,致力于解决 Java 语言和 JVM 的短板,参与推动 Java 生态演进。
公开数据显示,短短不到一年,腾讯 JDK 团队已向 OpenJDK 社区贡献了 70+ commits,分享了腾讯微服务等团队在云计算、微服务、大数据等生产负载技术方面的部分沉淀,其中针对 Vector API 向量计算、Loom 协程、ZGC 等方面的改进,是业界少有的生产级别前沿实践。
往期
推荐