各厂商,各版本 JDK 性能压测对比

jdk   信创  
发布于 Sep 19, 2024

前几天分享了几款国产 JDK ,最近也做了一些压测,今天把我所做的压测数据分享给大家,作为测试门外汉,不保证测试流程一定严格标准,测试用例及测试结果仅供参考,如果有不严谨的地方,希望大家多多指教。

测试需求如下:

  • 对比 x86 vs arm 架构 JDK 性能表现
  • 对比 不同版本 JDK 性能表现
  • 对比 不同厂商 JDK 性能表现

测试准备

准备需要用到的机器及 JDK,机器可以直接从云平台按需使用开出来,JDK 也提前下载好。

机器准备

  • x86 4c16g, 2 台,一台 待测机器,一台 jmeter 压测机
  • arm 4c16g, 2 台,一台 待测机器,一台 jmeter 压测机
  • arm 8c16g, 1台,既充当待测机器,又充当 jmeter 压测机(不同时)

JDK 准备

  • oracle jdk,8, 11, 17
  • bisheng jdk,8, 11, 17
  • kona jdk, 8, 11, 17
  • dragonwell jdk, 8, 11, 17

项目准备

  • golang gin hello 项目,用于辅助对比 arm vs x86 机器性能差异
  • springboot hello 项目

测试用例主要根据测试需求进行设计,本文使用测试技能点在之前的文章中已做过记录,推荐您可以查阅。

不同版本 JDK 性能差异

这个测试比较简单,就是在 单一机器架构下,更换不同的 JDK 进行分别压测,对比其性能差异,由于不同品牌各版本的结果基本一致,我这里只贴出一组数据用来辅助证明结论:

先抛出结论(性能从好到差排序):JDK 17 > JDK 11 > JDK 8

不同厂商 JDK 性能差异

这个主要比较在 arm 机器上不同厂商的差异,在 x86 上各厂商的相差不大,主要对比在 arm 架构的适配。

先抛出结论(可能是用的 aliyun ec2 的原因):dragonwell > bisheng > kona > oracle

不同架构下 JDK 性能差异

上 2 个测试结果其实已经可以看出端倪了,同样是 4c16g 的机器,在 arm 架构下性能下降明显,在测试过程中,更是发现 oracle jdk 8 压根连压测都跑不下去,会卡死不动

先抛结论:arm 同配置机器性能下降明显,cpu 利用率没有 x86 的利用率高,切换至 arm 8c16g 机器才与 x86 4c16g 相当

辅助验证架构对性能的影响

为了探究是不是 arm 机器存在偷工减料的情况,使用 golang gin 写一个 hello 项目进行测试,看看是不是也会下降。

先抛结论:arm 环境下 golang 项目性能基本与 x86 机器保持一致,不是 arm 机器偷工减料的问题

总结

经过几天的测试,当然不止上面贴的那么多内容,上面是最终沉淀下来的比较具有普遍性和代表性的样例,希望对大家做决策有所参考,这里再回顾一下结论。

  • go 项目对机器架构差异较小,使用 go 具有较好的跨平台性
  • jdk 版本更高,默认情况下性能会有所提高,可以选择使用较新的版本提升一下性能
  • arm 架构下 java 项目性能损耗比较大,推荐采用国产适配的 jdk 版本,bisheng,kona,dragonwell 都是不错的选择
  • arm java 项目的 cpu 利用率只有 50% 左右,这可能是其性能低下的原因,通过升级 cpu 核数可以提升其 tps,但也不是无限的

本次的分享到此结束,希望对你有所帮助。

如果你对我分享的内容感兴趣,欢迎扫码关注公众号:新质程序猿,并设置星标,推送更实时哟!

本文由 黄彦祥 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。
可自由转载、引用,但需署名作者且注明文章出处。