当前位置: 首页 > article >正文

Tomcat 版本怎么选?JMeter 真实压测多版本 Tomcat 数据给你最直接的参考,快收藏备用吧!

最近线上项目出现了一些性能问题,老板让我做一下调优,老天啊,最讨厌性能调优了,你就不能多买几台服务器抗一抗吗?哈哈,为了打发老板,我决定偷个懒,用版本升级的套路来快速优化一下,也算交个差吧!

本文无技术难点,直接开大测试,使用 3 台 jmeter 压力机,给我使劲轰不同版本的 tomcat。

如果你不熟悉 jmeter,刚好我前几天刚写了两篇入门文章可以推荐给你:

【JMeter 快速入门体验,小白也能看得懂!】

【JMeter 入门之远程启动,服务模式,多机联测,负载均衡测试】

好了,直接开整吧,准备了一个 springboot 最简单的 helloworld 项目,构建出 war 包。

准备了 3 台压测机 2 台待压测机

  • 10.70.44.18 4c16g arm64

  • 10.70.200.66 4c16g amd64

  • 10.70.44.30 8c16g arm64

  • 10.70.200.129 4c16g amd64

  • 10.70.44.25 4c16g arm64

准备了 tomcat 8-10 版本的

  • apache-tomcat-8.5.87

  • apache-tomcat-9.0.94

  • apache-tomcat-10.1.29

自学的测试技能,测试的不一定专业,有专业点的圈友可以点评指正,让我成长一下

测试用例如下:

  • 分别压测不同版本 tomcat 在相同机器上的性能表现

  • 分别压测相同版本 tomcat 在不同架构机器上的性能表现

配置环境变量方便切换(JDK 使用的是 kona 11)

压测1:amd tomcat 8

5 秒内拉起 1000 用户,每个用户请求 50 次
1000 * 50 = 5w 请求

./jmeter -n -R10.70.44.18:10000 -t examples/test.jmx

Java项目需要预热,可以多压测几次,测试多次,选取 2 次比较稳定的值如下

加大压力,5 秒内拉起 2000 用户,每个用户请求 50 次
2000 * 50 = 10w 请求

./jmeter -n -R10.70.44.18:10000,10.70.200.66:10000 -t examples/test.jmx

同样,选取 2 次稳定的输出,性能有所提升,证明 1000 并发没有达到性能极值

继续加大,5 秒内拉起 3000 用户,每个用户请求 50 次
3000 * 50 = 15w 请求

./jmeter -n -R10.70.44.18:10000,10.70.200.66:10000,10.70.44.30:10000 -t examples/test.jmx

同样,选取 2 次稳定输出,性能有所下降,说明压力有点大了,用户太多 tps 下降也属于正常

继续加大,5 秒内拉起 4500 用户,每个用户请求 50 次
4500 * 50 = 22.5w 请求

./jmeter -n -R10.70.44.18:10000,10.70.200.66:10000,10.70.44.30:10000 -t examples/test.jmx

tps 没有升,也没有降

继续加大,5 秒内拉起 6000 用户,每个用户请求 50 次
6000 * 50 = 30w 请求

./jmeter -n -R10.70.44.18:10000,10.70.200.66:10000,10.70.44.30:10000 -t examples/test.jmx

tps 还是相差不大,但是你会发现,随着并发数的增加,Avg 平均响应时间,Max 最大响应时间变大了

继续加大,5 秒内拉起 9000 用户,每个用户请求 50 次
9000 * 50 = 45w 请求

./jmeter -n -R10.70.44.18:10000,10.70.200.66:10000,10.70.44.30:10000 -t examples/test.jmx

tps 下降,有一定的出错率了

压测时 CPU top 值,4c 的机器,cpu 基本能打满,内存占用倒不大,主要接口比较简单

压测2:amd tomcat 9

5 秒内拉起 1000 用户,每个用户请求 50 次
1000 * 50 = 5w 请求

./jmeter -n -R10.70.44.18:10000 -t examples/test.jmx

稳定下来和 8 差别不大,1000 并发,tps 在9780 附近

加大压力,5 秒内拉起 2000 用户,每个用户请求 50 次
2000 * 50 = 10w 请求

./jmeter -n -R10.70.44.18:10000,10.70.200.66:10000 -t examples/test.jmx tps

有所增加,跟 tomcat 8 也是近乎一致,

继续加大,5 秒内拉起 3000 用户,每个用户请求 50 次
3000 * 50 = 15w 请求

./jmeter -n -R10.70.44.18:10000,10.70.200.66:10000,10.70.44.30:10000 -t examples/test.jmx

3000 并发貌似比 tomcat 8 好一丢丢, tps 多个7-800

继续加大,5 秒内拉起 4500 用户,每个用户请求 50 次 4500 * 50 = 22.5w 请求

./jmeter -n -R10.70.44.18:10000,10.70.200.66:10000,10.70.44.30:10000 -t examples/test.jmx

结论同上,依然比 tomcat 8 好一丢丢

继续加大,5 秒内拉起 6000 用户,每个用户请求 50 次
6000 * 50 = 30w 请求

./jmeter -n -R10.70.44.18:10000,10.70.200.66:10000,10.70.44.30:10000 -t examples/test.jmx

结论依然同上

继续加大,5 秒内拉起 9000 用户,每个用户请求 50 次
9000 * 50 = 45w 请求

./jmeter -n -R10.70.44.18:10000,10.70.200.66:10000,10.70.44.30:10000 -t examples/test.jmx

依然有出错,但是性能还是比 tomcat 8 好一点的

综述:tomcat 9 比 tomcat 8 性能好一点,也就一点,好吧,一点好也是好,苍蝇腿也是肉。

压测3:amd tomcat 10

注意:war 包部署到 tomcat 10 需要做一些调整,否则会 404 的

Apache Tomcat 10.0.5 开始默认的是 Jakarta EE 规范,而 Tomcat 9 和更早的版本默认是可以处理 Java EE 规范。因此, Tomcat 9 及更早版本开发的应用程序将无法在 Tomcat 10 上运行。而我使用的示例项目是在 Tomcat 9 的标准构建的。

解决方案是:

新建 webapps-javaee 文件夹(与webapps同一目录),然后将war包放在webapps-javaee目录中,当tomcat 启动后会自动将它们转换为 Jakarta EE 并复制到 webapps 目录下,保证项目可以正常运行。

直接压力上到 3000 吧,多跑几遍,等稳定
3000 * 50 = 15w 请求

./jmeter -n -R10.70.44.18:10000,10.70.200.66:10000,10.70.44.30:10000 -t examples/test.jmx

貌似接近 tomcat 9, 多个 200 也算吧!

继续加大,5 秒内拉起 4500 用户,每个用户请求 50 次
4500 * 50 = 22.5w 请求

./jmeter -n -R10.70.44.18:10000,10.70.200.66:10000,10.70.44.30:10000 -t examples/test.jmx

结论同上,比 tomcat 9 多个 300 tps,依然是一个很瘦的苍蝇腿

继续加大,5 秒内拉起 6000 用户,每个用户请求 50 次 6000 * 50 = 30w 请求

./jmeter -n -R10.70.44.18:10000,10.70.200.66:10000,10.70.44.30:10000 -t examples/test.jmx

哈哈,6000 并发的时候彰显出 tomcat 10 的魅力了哈,tps 不大降的情况还能保证 0 出错,这个绝对可以和老板吹牛逼交差了啊!

搞到 9000 试试呢? 9000 * 50 = 45w 请求

./jmeter -n -R10.70.44.18:10000,10.70.200.66:10000,10.70.44.30:10000 -t examples/test.jmx

tps 依然坚挺,有点出错率也是不错的成绩哈,可以去交差了

压测4:arm tomcat 10

因为公司有信创及 ARM 的需求,顺便在 ARM 机器上做一下验证,确保性能不至于太差。

4c16g

3000 * 50 = 15w 请求

./jmeter -n -R10.70.44.18:10000,10.70.200.66:10000,10.70.44.30:10000 -t examples/test.jmx

测试结果不尽如人意,比起 amd 的降低了 40% 多

4500 * 50 = 22.5w 请求

./jmeter -n -R10.70.44.18:10000,10.70.200.66:10000,10.70.44.30:10000 -t examples/test.jmx

压测时 cpu 利用率好像不太高,不知道为啥,对比 amd 感觉少用了 1 个核一样

8c16g

换一个 8c16g 的 arm 机器再试试

4500 * 50 = 22.5w 请求

./jmeter -n -R10.70.44.18:10000,10.70.200.66:10000,10.70.44.25:10000 -t examples/test.jmx

cpu 可以利用率高一点,性能也有所提升

性能也有所提升,8c 才能达到 amd 4c 的性能啊!

6000 * 50 = 30w 请求

./jmeter -n -R10.70.44.18:10000,10.70.200.66:10000,10.70.44.25:10000 -t examples/test.jmx

性能依然平稳,稳就不错嘛

继续加大
9000 * 50 = 45w 请求

./jmeter -n -R10.70.44.18:10000,10.70.200.66:10000,10.70.44.25:10000 -t examples/test.jmx

性能还算稳,依然是 8c16g 才达到 4c16g 的水平

压测5:jar tomcat-embed

再来看看一下 embed tomcat 的性能吧,这个我们用 amd 主机吧。

4500 * 50 = 22.5w 请求

./jmeter -n -R10.70.44.18:10000,10.70.200.66:10000,10.70.44.25:10000 -t examples/test.jmx

性能还可以,基本等同于 war 版本的性能

基本能把 cpu 满

压测结论

根据上面的压测结果估计你也大概知道结论了,整体看下来:

  • tomcat 8-10 随着版本的增进,性能会有所提升,tomcat 9 的性能提升较明显一点,tomcat 10 做了比较大的改版,性能提升一丢丢;

  • 同样配置如 4c16g, amd 机器可以更加充分的利用 cpu,性能较好,arm 机器增配到 8c16g 才达到 amd 4c16g 的性能;

  • 默认情况下,jar 项目和 war 项目性能差不多一致

好了,今天的分享就到这里,欢迎大家关注我,与我互动,最近再跟小伙伴们探索程序猿如何搞副业,建了一个小群交流,欢迎大家的加入与共创。


http://www.kler.cn/a/305141.html

相关文章:

  • Vite初始化Vue3+Typescrpt项目
  • 深入理解 Vue v-model 原理与应用
  • 【Qt-ROS开发】使用 Qt Creator 构建和编译含 ROS 库的 Qt 项目
  • 【韩老师零基础30天学会Java 】07章 面向对象编程(基础)
  • 快速学习Serde包实现rust对象序列化
  • 【电力系统】永磁同步电机调速系统带有扰动观测器
  • Gateway学习笔记
  • 牛客周赛 Round 29 (D E)
  • 【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(三十)
  • Oracle按照某一字段值排序并显示,相同的显示序号
  • C++详解string(全面解析)
  • 什么是算力?如何评估服务器算力?
  • rk3568系统buildroot开发笔记
  • Playwright 自动化验证码教程
  • 【计算机网络 - 基础问题】每日 3 题(三)
  • 基于鸿蒙API10的RTSP播放器(九:进度总结)
  • 进程的基本概念
  • C#中判断socket是否已断开的方法
  • CHARLS数据库系列教程(2)---数据清洗、拼接和整理(1)
  • 数据中台建设(六)—— 数据开发-提取数据价值
  • 第1步win10宿主机与虚拟机通过NAT共享上网互通
  • 系统架构设计师教程 第5章 5.3 系统分析与设计 笔记
  • 【chrome插件】只需一键,浏览器的书签信息就可以导出成为CSV了
  • OpenCV进行灰度变换
  • 打包好的jar包,如何部署在服务器?——详细教程
  • 死锁例子学习