前几天分享了几款国产 JDK ,最近也做了一些压测,今天把我所做的压测数据分享给大家,作为测试门外汉,不保证测试流程一定严格标准,测试用例及测试结果仅供参考,如果有不严谨的地方,希望大家多多指教。
测试需求如下:
-
对比 x86 vs arm 架构 JDK 性能表现
-
对比 不同版本 JDK 性能表现
-
对比 不同厂商 JDK 性能表现
测试准备
准备需要用到的机器及 JDK,机器可以直接从云平台按需使用开出来,JDK 也提前下载好,推荐 2 篇之前写的文章:
机器准备
-
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 项目
测试用例主要根据测试需求进行设计,本文使用测试技能点在之前的文章中已做过记录,推荐您可以查阅:
- 【JMeter 快速入门体验,小白也能看得懂!_jmeter菜鸟教程-CSDN博客】
- 【JMeter 入门之远程启动,服务模式,多机联测,负载均衡测试-CSDN博客】
- 【Tomcat 版本怎么选?JMeter 真实压测多版本 Tomcat 数据给你最直接的参考,快收藏备用吧!-CSDN博客】
现在开整
测试不同版本 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,但也不是无限的
好了,以上就是今天的分享,希望对你有所帮助,我建了一个程序猿副业交流群,欢迎冠珠下方二维码获取 1000 套高质量技术专栏和训练营课程,也可以获取我的联系方式并找到我,拉你进副业群一起交流。
小福利
文末小福利,作为资深囤货达人,购置或转存了上千 T 的各种资源,反正我也学不完,如有需要,可以公#号:新质程序猿,找到我,免费送您,能帮助到大家也算是有所福报吧!