版权声明: https://blog.csdn.net/weixin_38187317/article/details/81532560
说明
        undertow,jetty和tomcat可以说是javaweb项目当下最火的三款服务器,tomcat是apache下的一款重量级的服务器,不用多说历史悠久,经得起实践的考验。然而:当下微服务兴起,spring boot ,spring cloud 越来越热的情况下,选择一款轻量级而性能优越的服务器是必要的选择。spring boot 完美集成了tomcat,jetty和undertow,本文将通过对jetty和undertow服务器的分析以及测试,来比较两款服务器的性能如何。

  值得一提的是jetty和undertow都是基于NIO实现的高并发轻量级的服务器,支持servlet3.1和websocket。所以,有必要先了解下什么是NIO。

NIO(非阻塞式输入输出)

Channel
Selector
Buffer
Acceptor
  Client和Server只向Buffer读写数据不关注数据的流向,数据通过Channel通道进行流转。而Selector是存在与服务端的,用于Channel的注册以此实现数据I/O操作。Acceptor负责接受所以的连接通道并且注册到Channel中。而整个过程客户端与服务端是非阻塞的也就是异步操作。

下面是压力测试对比图:

服务器     命中   成功率   吞吐量                     平均耗时
Jetty        11488 100%     96.25 trans/sec      0.00sec
               18393 100%     153.92 trans/sec    0.01sec
                21484 99.99% 179.51 trans/sec    0.01sec
Undertow 11280 100%    94.02 trans/sec      0.00sec
                19442 100%    163.35 trans/sec    0.01sec
                23277 100%    195.54 tran/sec      0.01sec
Tomcat    10845 100%     90.95 trans/sec      0.02sec
                21673 99.98% 181 trans/sec         0.01sec
                25084 99.98% 209.10 trans/sec    0.01sec
从中可以看出在高负载下Undertow的吞吐量高于Jetty而且随着压力增大Jetty和Undertow成功率差距会拉大。而在负载不是太大情况下服务器处理能力差不多,jetty还略微高于Undertow。而tomcat的负载能力似乎和Undertow很接近。

  对比三个服务器发现在Undertow在负载过重情况下比Jetty和Tocmat更加顽强,实践证明在负载继续加大情况下Undertow的成功率高于其它两者,但是在并发不是太大情况下三款服务器整体来看差别不大。

快速开始
更新pom.xml文件:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- 下面的配置将使用undertow来做服务器而不是tomcat -->

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>

application.yml配置:

server:
port: 8081
# 下面是配置undertow作为服务器的参数
undertow:
# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
io-threads: 4
# 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
worker-threads: 20
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
# 每块buffer的空间大小,越小的空间被利用越充分
buffer-size: 1024
# 是否分配的直接内存
direct-buffers: true
配置比较简单,和tomcat使用基本一样,然后就可以快乐的使用undertow啦~

转载于:https://www.cnblogs.com/xifenglou/p/10475695.html

springboot undertow替换tomcat方式相关推荐

  1. SpringBoot使用Undertow替换tomcat

    什么是Undertow Undertow 是一个采用 Java 开发的灵活的高性能 Web 服务器,提供包括阻塞和基于 NIO 的非堵塞机制.Undertow 是红帽公司的开源产品,是 Wildfly ...

  2. SpringBoot的Undertow和Tomcat对比

    前言 在 SpringBoot 框架中,使用最多的是 Tomcat,这是 SpringBoot 默认的容器技术,而且是内嵌式的 Tomcat. 同时,SpringBoot 也支持 Undertow 容 ...

  3. springBoot中jetty tomcat undertow对比与undertow线程池配置

    springBoot中jetty tomcat undertow对比 1)tomcat优点是稳定性好.可靠性高.支持 Servlet 和 JSP 等标准.构建中小型的 Web 应用程序,可以选择 To ...

  4. 解密Springboot内嵌Tomcat

    Springboot简介 相信大多数开发者对Springboot比较熟悉了,它能够快速地创建一个spring应用,能够完全摒弃XML的配置方式,并且内嵌了Tomcat.Jetty这样的Servlet容 ...

  5. 指定SpringBoot内嵌Tomcat的版本,修复(CVE-2021-42340)漏洞

    1.Tomcat漏洞 近日,Apache Tomcat 发布安全更新,更新了一处拒绝服务漏洞(CVE-2021-42340).攻击者可以通过该漏洞进行拒绝服务攻击.建议广大用户及时升级至最新版本. 1 ...

  6. tomcat start 无法启动_解密Springboot内嵌Tomcat

    Springboot简介 相信大多数开发者对Springboot比较熟悉了,它能够快速地创建一个spring应用,能够完全摒弃XML的配置方式,并且内嵌了Tomcat.Jetty这样的Servlet容 ...

  7. 深入springboot怎么启动tomcat

    深入springboot怎么启动tomcat @EnableAutoConfiguration做了哪些事 小总结 Tomcat何时启动的呢? 小总结 这是中高级工程师面试中常问的问题. 知道现在有多卷 ...

  8. SpringBoot undertow accesslog格式

    关于SpringBoot undertow中accesslog的格式 1.背景 1.收集accesslog日志. 2.项目使用SpringBoot的undertow. 3.日志格式有特殊要求. 2.问 ...

  9. SpringBoot配置外部Tomcat项目启动流程源码分析(下)

    前言 SpringBoot应用默认以Jar包方式并且使用内置Servlet容器(默认Tomcat),该种方式虽然简单但是默认不支持JSP并且优化容器比较复杂.故而我们可以使用习惯的外置Tomcat方式 ...

最新文章

  1. IDEA 解决 Java8 的数据流问题,用过的都说好!!!
  2. ISME:南土所梁玉婷组-不同气候条件下微生物代谢及残体介导施肥对土壤有机碳的影响...
  3. css3 box-shadow 总结
  4. px4 uavcan linux,UAVCAN总线 - UAVCAN固件升级 - 《PX4开发指南》 - 书栈网 · BookStack
  5. oracle查被锁存储过程,oracle 结束被锁的包或存储过程
  6. 小程序向webview传参_独家 | 支付宝小程序向个人开发者开放公测
  7. Visual C++ 2011-07-18
  8. MySQL基础篇(05):逻辑架构图解和InnoDB存储引擎详解
  9. 华图砖题库php文件怎么打印_事业单位招聘考试《工会基础知识》试题库及答案1380题...
  10. 中国喷漆室保护膜市场趋势报告、技术动态创新及市场预测
  11. 安卓9开机 bootanimation.zip_小米手机如何从安卓10退回安卓9系统,不丢失传感器,不变砖...
  12. win10固态硬盘分区 整数_固态硬盘怎么重装win10系统?Win10固态硬盘重装系统教程...
  13. android中的各种 Category
  14. webgl中解决深度冲突-多边形偏移
  15. 计算机在中药材的应用,计算机在中医药中的应用
  16. excel时间戳转换为时间格式
  17. Cloudflare免费CDN加速及防护
  18. jmeter压测学习10-linux上执行遇到的问题 There is insufficient memory for the Java Runtime Environment to continu
  19. 大型互联网架构设计踩坑
  20. 苹果放大镜在哪_说马思纯装卖惨恶心的,请拿着你的放大镜去找其他人!

热门文章

  1. 拳王虚拟项目公社:虚拟商品全自动化赚钱技术,虚拟产品自动赚钱能信吗?虚拟资源教程
  2. 朱海舟宣布新一批应用已经适配锤子TNT 网友:救救海舟
  3. Java并发编程之ConcurrentHashMap原理解析
  4. [python]json.loads 几种错误 解决方案
  5. linux内核文件cache机制,Linux内核文件Cache机制
  6. java加密 c解密_java+加密解密
  7. TCP/IP的初步理解,TCP和UDP的区别
  8. cups源码下载 linux_正点原子Linux第七十章Linux WIFI驱动实验
  9. 利用公式画图_【高中数学】重要公式大汇总!
  10. c++20 协程 图片识别框架 紫丁香