SpringBoot 之 Tomcat 与 Undertow 容器性能对比

news2025/1/19 11:01:52

一、前言🔥

环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

        在上一篇《SpringBoot 之配置 Undertow 容器》一文中写道:“Undertow 的性能和内存使用方面都要优于 Tomcat 容器”, 这一期,我就要给大家来求证一波,口说无凭,那我就拿当前的 Web 项目来做为测试项目,监控工具就地取材,通过使用 JDK 自带的 jvisualvm 工具,分别监控对比一下 tomcat 与 Undertow 使用前后各项指标的发生情况。

可能还有很多小伙伴不知道 jdk 自带的 jvisualvm 怎么玩,具体我将在如下进行步骤讲解。

二、jvisualvm 工具使用说明🔥

        首先 jvisualvm.exe 位于 jdk 安装目录下的 bin 文件中下,比如我的[C:\Program Files\Java\jdk1.8.0_201\bin],你们的自己找一下,然后在 bin 文件夹中找到[ jvisualvm.exe ],双击打开。具体请看如下截图:

​启动后的实际界面如下:

        我们可以从应用程序中找到我们正启动着的 springboot 应用,比如这是我的项目应用:com.example.demo.DemoApplication,找到应该选中双击进入,可以看到同界面右半部分会弹出应用程序等相关信息。

        为此,监控工具就准备妥当了,接下来测试正式开始。

三、测试对比🔥

1、Tomcat 容器测试

        首先我们把项目使用容器切换为 Tomcat。我们先来看看,Tomcat 容器在相同项目环境下运行中,堆内存大约使用了 41M,线程活动数:29,实际峰值:33。

​        如上监控截图还可以看到 cpu 使用为 0,那是项目接口没有被请求,接着我模拟项目被疯狂请求的情景(同一接口调用 20 次)。

        项目运行各方面指数会发生如何变化?大家请仔细看:

        当发送大量请求时,分析如上监控数据,可以得知,项目运行最大 cpu 使用占比为 1.1%,堆内存使用大约 75M,前后出现断崖式下跌。

接着我们来测试一下使用 Undertow 容器,看看它的表现又如何。

2、Undertow 容器测试

        我先把 tomcat 容器切换成轻量级 Undertow,然后重新打开监控工具,大家请看。

        它大约堆内存使用了 138M,线程活动数:20,实际峰值:23。这还是在应用不复杂的情况下,大型应用出入会更大。

        为保证同试验场景,我也是同一接口 20 次请求,进行接口调用模拟,看看 Undertow 的表现如何?请大家敬请期待。

​        当发送大量请求时,分析监控各项数据,可以得知,最大 cpu 使用占比 30%,堆内存使用大约 60M,线程活数丝毫不动,发现堆内存的占用增长不明显。

3、试验结论

        通过试验结果数据分析对比,发现项目使用 Undertow 容器的情况下,无论是堆内存使用情况还是线程使用情况,明显比使用 tomcat 容器下更胜一筹;但在并发量不高的情况下 , 也发现 Tomcat 与 undertow 的吞吐量区别上看上去变化不大。

四、总结🔥

        在 SpingBoot 项目中,我们既可以使用 Tomcat 作为 Http 服务,也可以用 Undertow 来代替 Tomcat;对于 Jetty,看场景选择,若是面对长连接、即时通信等聊天场景为主,那首选 Jetty 容器,Jetty 在这方面表现更佳,总之,Jetty 的性能和内存使用方面都优于 Tomcat,弱于 Undertow。

其次对于 Undertow 在高并发业务场景中,性能优于 Tomcat 容器(测试数据肉眼可见)。

所以,对于高并发项目,首选推荐使用 Undertow,你会发现你的系统性能会得到很大的提升。

... ...

        ok,以上就是我这期的全部内容啦,如果还想学习更多,可以看看我的往期热文推荐哦,不积跬步,无以至千里; 不积小流,无以成江海,一口吃不成一个大胖子,加油!咱们下期拜拜~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/575993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

受不了了,被00后卷的想辞职了

在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求,向他学习还来不及呢。 真正让人反感的,是技术平平&…

御剑WEB指纹识别系统教程,图文教程(超详细)

「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 御剑WEB指纹识别 一、基本使用二、内置字典三、自定义字典四、扫描原理 御剑WEB指纹识别系…

php html转pdf wkhtmltopdf

系统CentOS7.6 1.安装 wkhtmltopdf yum install wkhtmltopdf 看别的大佬的教程这步就已经可以正常生成,但我这边运行脚本的时候返回了 "wkhtmltopdf: cannot connect to X server" 2.安装 Xvfb yum install Xvfb 3.运行脚本 xvfb-run --server-ar…

20220912深圳市梧桐山桃花源看植物

20220912深圳市梧桐山桃花源看植物 2023/5/27 13:27 大自然生态探索之旅第3期 明天去梧桐山看植物。有空不? 交通方式: 黄贝岭地铁站C出口坐M445到终点! 02木荷 https://baijiahao.baidu.com/s?id1676100940201729045&wfrspider&fo…

人生苦短,我用Python。

人生苦短,我用Python。欢迎大家一起分享,你是如何入门Python的~ 方向一:你是如何学习/自学 Python 的? 偶然的机会接触到python,于是开始利用空闲时间学起了python。自学过2年python,有一些学习心得和避坑…

分布式事务的21种武器 - 6

在分布式系统中,事务的处理分布在不同组件、服务中,因此分布式事务的ACID保障面临着一些特殊难点。本系列文章介绍了21种分布式事务设计模式,并分析其实现原理和优缺点,在面对具体分布式事务问题时,可以选择合适的模式…

Linux——进程轮换

目录 一.进程切换 1.定义: 2.硬件上下文: 总结: 一.进程切换 1.定义: 进程切换(process switch),作为抢占式多任务的一个重要功能,其实质就是OS内核挂起正在运行的进程A,然后将先前被挂起的另一个进程B恢复运行。 2.硬…

天书奇谈3D服务端搭建架设教程Centos

天书奇谈3D服务端搭建架设教程Centos 大家好,我是艾西,今天给大家分享一款回合制MMORPG手游的搭建教程。也算是G 内回合制手游的第一梯队吧,回合制手游总会有那么一帮热爱的玩家我们话不多说直接进入正题开始操作: 架设准备&…

00后们劝你们不要去外包,3年外包,废了....

先说一下自己的情况,专科生,19年通过校招进入杭州某个外包软件公司,干了接近3年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了3年的功…

UNIX网络编程卷一 学习笔记 第十六章 非阻塞式IO

套接字的默认状态是阻塞的,当发出一个不能立即完成的套接字调用时,进程将被投入睡眠,等待相应操作完成。可能阻塞的套接字调用有以下四类: 1.输入操作:包括read、readv、recv、recvfrom、recvmsg函数。如果进程对一个阻…

公司study three

ctrlwind:新建桌面 ctrlwin 箭头 切换桌面 WIN CTRL F4 删除桌面 mybatis-plusstreamlambda lambda遍历 存值 if (bpmBoEntityList ! null && !bpmBoEntityList.isEmpty()) {bpmBoEntityList.forEach(x -> {BpmBoEntityDTO dto new BpmBoEntityDT…

一.《HIT2台服韩服》背包遍历和物品品质潜规则

首先找背包遍历 1.通过物品数量我们入手找 2.首先CE搜索当前药品数量 3.然后消耗一瓶血药 4.CE继续搜索10,你会发现还剩下1423个结果 5.经过我们几次的筛选,最终找到几个结果 6.拿到地址后,我们用XDBG附加游戏后查看这个地址 7.随后我们在这个地址上下写入断点,通过消耗血药,就…

English Learning - L3 作业打卡 Lesson3 Day19 2023.5.23 周二

English Learning - L3 作业打卡 Lesson3 Day19 2023.5.23 周二 引言🍉句1: She also told us “you have to break some eggs to make an omelet”.成分划分弱读连读爆破语调 🍉句2: This means you have to do what is necessary to move forward.成分…

English Learning - L3 作业打卡 Lesson3 Day20 2023.5.24 周三

English Learning - L3 作业打卡 Lesson3 Day20 2023.5.24 周三 引言🍉句1: She would always give us nutritious food.成分划分连读语调 🍉句2: She liked serving us meat and potatoes for dinner.成分划分弱读连读爆破语调 # 🍉句3: Mea…

ACL 2019 - AMR Parsing as Sequence-to-Graph Transduction

AMR Parsing as Sequence-to-Graph Transduction 论文:https://arxiv.org/pdf/1905.08704.pdf 代码:https://github.com/sheng-z/stog 期刊/会议:ACL 2019 摘要 我们提出了一个基于注意力的模型,将AMR解析视为序列到图的转导。…

Doris---索引

前缀索引 doris中,对于前缀索引有如下约束: 他的索引键最大长度是36个字节 当他遇到了varchar数据类型的时候,即使没有超过36个字节,也会自动截断 示例1:以下表中我们定义了: user_id,age,message作为表的key ; C…

【C++】“最强查找“哈希表的底层实现

哈希表的查找的时间复杂度是O(1)~ 文章目录 前言一、哈希冲突和哈希函数二、哈希表底层实现 1.开放地址法2.链地址法总结 前言 哈希概念: 顺序结构以及平衡树 中,元素关键码与其存储位置之间没有对应的关系,因此在 查…

100道护网面试题大全(附答案)

最近日入1000的护网行动已经开始摇人了, 不少大学生在后台私信我如何参加护网、面试问些什么、有没有护网内推 作为一个负责任的博主,收到大家反馈的我,连夜发动钞能力,收集整理了一套护网蓝初面试文档 1. 什么是DDoS攻击&#x…

深度学习编译器

1.为什么需要深度学习编译器 深度学习编译器主要为解决不同框架下训练的模型部署到指定的某些设备上时所遇到的一系列复杂的问题,即将各种深度学习训练框架的模型部署到各种硬件所面临的问题; 首先深度学习领域,从训练框架看,当前…

安科瑞消防设备电源监控系统选型及介绍

安科瑞 徐浩竣 江苏安科瑞电器制造有限公司 zx acrelxhj 摘要:自 2014 年《火灾自动报警系统设计规范》实施以来,由于针对消防设备电源监控系统的规定较为模糊,尚未确立详细的规定,导致当前消防设备电源监控系统的设计和建立呈…