精华内容
下载资源
问答
  • 在网上搜索查询发现清一色的都是说undertow高并发性能优于tomcat,并且还提供了各种实验依据以作证明,但是我私下测试发现情况和网上大部分结果并不一致。 简单接口测试 @GetMapping("/test") publicStringtest...

    在网上搜索查询发现清一色的都是说undertow高并发性能优于tomcat,并且还提供了各种实验依据以作证明,但是我私下测试发现情况和网上大部分结果并不一致。

    简单接口测试

       @GetMapping("/test")
       public String test() {
           return UUID.randomUUID().toString();
      }

    这是第一次测试的接口,使用jemter每秒600个线程调用这个接口。

    Tomcat

    Undertow

    Jetty

    结论

    在简单接口中,发现tomcat对于cpu的占用是最低的,而且吞吐量最高。另外jetty停止测试花费了最长的时间导致吞吐量变低。

    简单接口下吞吐量:tomcat>jetty>undertow

    cpu:tomcat>jetty>undertow

    复杂接口测试

    Tomcat

    Undertow

    Jetty

    结论

    在稍复杂的接口测试下,tomcatunderwow的差距并没有很大,但是tomcat在吞吐量和cpu方面依然占据了稍小的优势,jetty与前两者存在差距。

    复杂接口下吞吐量:tomcat>undertow>jetty

    cpu:tomcat>undertow>jetty

    从结果来看,tomcat依然是最稳定的服务器,而不是网上各种博主说的undertow更优。而jetty更适合长连接的服务,但是长连接我更倾向于选择nettyundertow更适合用于IO密集型服务器,或者文件服务器使用undertow会是一个不错的选择,但是在一般情况下还是老老实实的使用Springboot默认的tomcat吧。

    展开全文
  • 文章目录Spring Boot 容器选型(Tomcat/Undertow)TomcatUndertow参考 Spring Boot 容器选型(Tomcat/Undertow) spring boot内置容器性能比较(Jetty、TomcatUndertow) 参考URL: ...

    Spring Boot 容器选型(Tomcat/Undertow)

    spring boot内置容器性能比较(Jetty、Tomcat、Undertow)
    参考URL: https://blog.csdn.net/syx1065001748/article/details/98883727

    通过测试发现,在高并发系统中,Tomcat相对来说比较弱。在相同的机器配置下,模拟相等的请求数,Undertow在性能和内存使用方面都是最优的。并且Undertow新版本默认使用持久连接,这将会进一步提高它的并发吞吐能力。所以,如果是高并发的业务系统,Undertow是最佳选择。

    其实在并发量不大的情况下 Undertow、和其它两款 Servlet Web 容器 Jetty 、Tomcat 的差距并不是很大。 Undertow 的优势是高并发下的吞吐量。你可以根据自己的实际需要来选择。

    Tomcat

    Tomcat是Apache基金下的一个轻量级的Servlet容器,支持Servlet和JSP。Tomcat具有Web服务器特有的功能,包括 Tomcat管理和控制平台、安全局管理和Tomcat阀等。Tomcat本身包含了HTTP服务器,因此也可以视作单独的Web服务器。但是,Tomcat和ApacheHTTP服务器不是一个东西,ApacheHTTP服务器是用C语言实现的HTTP Web服务器。Tomcat是完全免费的,深受开发者的喜爱。

    Undertow

    官网:http://undertow.io
    https://github.com/undertow-io/undertow

    Undertow是Red Hat公司的开源产品, 它完全采用Java语言开发,是一款灵活的高性能Web服务器,支持阻塞IO和非阻塞IO。由于Undertow采用Java语言开发,可以直接嵌入到Java项目中使用。同时, Undertow完全支持Servlet和Web Socket,在高并发情况下表现非常出色。

    Undertow 是基于java nio的web服务器,应用比较广泛,内置提供的PathResourceManager,可以用来直接访问文件系统;如果你有文件需要对外提供访问,除了ftp,nginx等,undertow 也是一个不错的选择,作为java开发,服务搭建非常简便。

    官网API给出一句话概述Undertow:

    Undertow is a flexible performant web server written in java, providing both blocking and non-blocking API’s based on NIO.

    译文: Undertow是一个用java编写的灵活的高性能Web服务器,提供基于NIO的阻塞和非阻塞API。

    Undertow特点

    • 高性能 在多款同类产品的压测中,在高并发情况下表现出色。
    • Servlet4.0 支持 它提供了对 Servlet4.0 的支持。
    • Web Socket 完全支持,包括JSR-356,用以满足 Web 应用巨大数量的客户端。
    • 内嵌式 它不需要容器,只需通过 API 即可快速搭建 Web 服务器。
    • 灵活性 交由链式Handler配置和处理请求,可以最小化按需加载模块,无须加载多余功能。
    • 轻量级 它是一个 内嵌Web 服务器, 由两个核心 Jar 包组成

    使用 jakarta.servlet-api

    提示原文如下

    the contracts between a servlet class and the runtime environment provided for an instance of such a class by a conforming servlet container. For versions prior to 4.0.2 these classes and interfaces are described by the Java Servlet API Specification. For version 4.0.2 and later they are described by the Jakarta Servlet Specification

    我们使用undertow 依赖 jakarta.servlet-api 这个包,在4.0.2 版本之后改用到 jakarta.servlet-api 这个包,好处是包更小了。

     <dependency>
           <groupId>jakarta.servlet</groupId>
           <artifactId>jakarta.servlet-api</artifactId>
           <version>${jakarta-servlet.version}</version>
       </dependency>
    

    在要使用 HttpServletRequest 的时候添加 Jakarta 依赖就可以了。

    对比测试

    总结
    其实在并发量不大的情况下 Undertow、和其它两款 Servlet Web 容器 Jetty 、Tomcat 的差距并不是很大。 **Undertow 的优势是高并发下的吞吐量。**你可以根据自己的实际需要来选择。

    QPS测试结果对比:

    Tomcat在这里插入图片描述Undertow
    在这里插入图片描述

    通过测试发现,在高并发系统中,Tomcat相对来说比较弱。**在相同的机器配置下,模拟相等的请求数,Undertow在性能和内存使用方面都是最优的。**并且Undertow新版本默认使用持久连接,这将会进一步提高它的并发吞吐能力。所以,如果是高并发的业务系统,Undertow是最佳选择。

    参考

    Spring Boot 集成undertow作为web容器分析
    参考URL: https://www.cnblogs.com/ljgeng/p/11079091.html
    SpringBoot 内嵌容器的比较
    参考URL: https://www.cnblogs.com/paxing/p/10471054.html

    展开全文
  • SpringBoot2.x tomcat jetty undertow 切换 springBoot 提供有三种servlet容器: Tomcat,Jetty,Undertow 默认使用的是tomcat 1.移除默认的tomcat <dependency> <groupId>org.springframework.boot</...

    SpringBoot2.x tomcat jetty undertow 切换

    springBoot 提供有三种servlet容器: Tomcat,Jetty,Undertow
    默认使用的是tomcat

    1.移除默认的tomcat
        <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <exclusions>
                    <exclusion>
                        <artifactId>spring-boot-starter-tomcat</artifactId>
                        <groupId>org.springframework.boot</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
    
    2.切换 jetty
           <dependency>
                <artifactId>spring-boot-starter-jetty</artifactId>
                <groupId>org.springframework.boot</groupId>
            </dependency>
    

    在这里插入图片描述

    3.切换 undertow
           <dependency>
                <artifactId>spring-boot-starter-undertow</artifactId>
                <groupId>org.springframework.boot</groupId>
            </dependency>
    

    在这里插入图片描述

    展开全文
  • 吊打 TomcatUndertow 性能很炸!!

    千次阅读 2020-08-24 13:47:52
    今天再介绍另外一款能和 Tomcat 媲美的神器:Undertow,据说性能方面还要吊打 Tomcat,如果你还不知道它,那你就 OUT 了。 我们来看下 Spring Boot 默认支持的三种 Servlet 容器: Name Servlet Version ...

    在 Java Web 容器的世界里,Tomcat 和 Jetty 是大名鼎鼎的、用的最多的开源项目,也是大众熟知的。

    今天再介绍另外一款能和 Tomcat 媲美的神器:Undertow,据说性能方面还要吊打 Tomcat,如果你还不知道它,那你就 OUT 了。

    我们来看下 Spring Boot 默认支持的三种 Servlet 容器:

    Name Servlet Version
    Tomcat 9.0 4.0
    Jetty 9.4 3.1
    Undertow 2.0 4.0

    以上来源于 Spring Boot 2.3.2 官方文档,更多信息请点击这里参考这篇文章。

    Undertow 它能成为 Spring Boot 默认集成的三大容器之一,就凭这点,我想就足以说明它的地位。

    Undertow 什么鬼?

    Undertow 是 RedHat(红帽公司)的开源产品,采用 Java 开发,是一款灵活、高性能的 Web 服务器,提供了基于 NIO 的阻塞/非阻塞 APIs,也是 Wildfly 的默认 Web 容器。

    搜索 Undertow:

    页面显示的是 JBoss Community,因为 2006 年 RedHat 收购了 JBoss,那也就不足为怪了。

    Undertow 它是一个基于组合的体系结构,可以通过组合一系列小型处理器来构建一个 Web 服务器。这就让我们可以灵活的在 Java EE servlet 4.0 容器和底层非阻塞处理器或者其他更多之间进行选择。

    Undertow 被设计成完全可嵌入式的,所以也叫嵌入式容器,具有易于使用的流畅构建 API,另外,Undertow 的生命周期也完全由所嵌入的应用程序所控制。

    这也是为什么 Spring Boot 可以直接嵌入 Undertow 的原因,Undertow 它就是为了嵌入而发烧的。Spring Boot 基础知识就不介绍了,关注公众号Java技术栈在后台回复boot获取我写的系列教程。

    官方网站:

    https://undertow.io/

    源码托管在 Github:

    https://github.com/undertow-io/undertow

    Undertow 有啥特性?

    1)HTTP/2 Support

    Undertow 支持 HTTP/2 开箱即用,不需要重写引导类路径。

    2)支持 HTTP 升级

    支持 HTTP 升级,允许多个协议通过 HTTP 端口上进行复用。

    3)支持 Web Socket

    Undertow 提供对 Web 套接字的全面支持,包括对 JSR-356 的支持。

    4)支持 Servlet 4.0

    Undertow 提供了对 Servlet 4.0 的支持,包括对嵌入式 Servlet 的支持,还可以混合部署 Servlet 和原生 Undertow 非阻塞处理程序。

    5)可嵌入式

    Undertow 可以嵌入到应用程序中,也可以通过几行代码独立运行。

    6)高灵活性

    一个 Undertow 服务器是通过链式处理器来配置的,可以根据需要添加功能,因此可以避免添加没有必要的功能。

    Undertow 性能如何?

    国外有篇帖子做了 Tomcat vs. Jetty vs. Undertow 三者的性能比较:

    https://examples.javacodegeeks.com/enterprise-java/spring/tomcat-vs-jetty-vs-undertow-comparison-of-spring-boot-embedded-servlet-containers/

    从测试结果看,这三个 Servlet 容器都具有不错的性能,但 Undertow 性能更好,Tomcat 和 Jetty 紧随其后。

    Jetty 在启动时的内存占用最大,为:311 MB, Tomcat 和 Undertow 的初始内存占用都很低,大约为:120 MB,而 Undertow 的初始内存占用最低,为:114 MB。

    最后,关键的区别在于,Undertow 响应头参数默认包含 HTTP 持久连接信息,这个头参数在支持持久连接的客户端时,可以通过重用连接来优化性能。

    Show me the code

    Undertow 目前有两个主要版本:

    • 2.1:当前支持 Servlet 4.0, JDK8+ 的稳定版本;
    • 1.4:当前支持 Servlet 3.1, JDK7 的稳定版本;

    独立使用 Undertow 需要添加以下依赖:

    <dependency>
        <groupId>io.undertow</groupId>
        <artifactId>undertow-core</artifactId>
        <version>2.1.0.Final</version>
    </dependency>
    
    <dependency>
        <groupId>io.undertow</groupId>
        <artifactId>undertow-servlet</artifactId>
        <version>2.1.0.Final</version>
    </dependency>
    
    <dependency>
        <groupId>io.undertow</groupId>
        <artifactId>undertow-websockets-jsr</artifactId>
        <version>2.1.0.Final</version>
    </dependency>

    以下示例来源官网:

    public class HelloWorldServer {
    
        public static void main(final String[] args) {
            Undertow server = Undertow.builder()
                    .addHttpListener(8080, "localhost")
                    .setHandler(new HttpHandler() {
                        @Override
                        public void handleRequest(final HttpServerExchange exchange) throws Exception {
                            exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
                            exchange.getResponseSender().send("Hello World");
                        }
                    }).build();
                server.start();
        }
    }

    这是一个使用了异常 IO 的简单 Hello World 示例。

    Spring Boot & Undertow

    上面讲到,Undertow 是为嵌入式而生的 Web 容器,又是 Spring Boot 默认集成的容器之一,下面栈长带大家来看下如何在 Spring Boot 中使用 Undertow。

    因为在 spring-boot-starter-web 启动器中,Tomcat 是 Spring Boot 默认的嵌入式容器,即:spring-boot-starter-tomcat

    Spring Boot 还提供了其他两个启动器以方便进行代替:

    • spring-boot-starter-jetty
    • spring-boot-starter-undertow

    下面来简单实战下,如何在 Spring Boot 中使用 Undertow。Spring Boot 基础知识就不介绍了,不熟悉的可以关注公众号Java技术栈在后台回复boot获取我写的系列教程。

    排除 Tomcat 依赖,然后加入 Undertow 依赖:

    <dependencies>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <!-- Exclude the Tomcat dependency -->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    
        <!-- Use Undertow instead -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>
    
    </dependencies>

    一步就完成集成了,当然实际情况还需要在 application 配置文件中加入 Undertow 的更多自定义或者优化配置参数。

    Undertow容器的具体配置可以看这两个类:

    • org.springframework.boot.autoconfigure.web.ServerProperties
    • org.springframework.boot.autoconfigure.web.ServerProperties.Undertow

    也可以看 Spring Boot 官方文档:

    https://docs.spring.io/spring-boot/docs/2.3.2.RELEASE/reference/htmlsingle/#server-properties

    上面有所有 Server 配置参数和说明。

    再写一个测试方法测试下:

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * 微信公众号:Java技术栈
     */
    @RestController
    @SpringBootApplication
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class);
        }
    
        @GetMapping(value = "/undertow/test")
        public String undertow() {
            return "hello undertow";
        }
    
    }

    启动 Application:

    如上所示,可以看到 Undertow 的启动日志。

    访问测试方法:

    http://localhost:8080/undertow/test

    输出成功,测试完成。

    总结

    本文对 Undertow 作了一个介绍和集成实战,虽然 Undertow 性能很炸,但你可以去网上找一圈,根本没啥学习资料。

    所以,对于学习和一般应用来说,Tomcat 足矣,一方面 Tomcat 学习资料多,另一方面 Tomcat 用的更广泛,很多坑别人帮你踩了,很多漏洞也已经暴露出来了。

    那于那些一定要追求极致性能的又不想优化 Tomcat 的,可以考虑使用 Undertow,但同时你要有能力 Hold 住它,需要一定的积累经验,不然出一个问题你线上卡半天显然是不愿意看到的。

    最后,网上很多文章说干掉 Tomcat 而要使用 Undertow 的,这就有点夸张,我只能呵呵了,持有保留意见,用啥都行,关键能不能用好。

    推荐去我的博客阅读更多:

    1.Java JVM、集合、多线程、新特性系列教程

    2.Spring MVC、Spring Boot、Spring Cloud 系列教程

    3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程

    4.Java、后端、架构、阿里巴巴等大厂最新面试题

    觉得不错,别忘了点赞+转发哦!

    最后,关注下面的栈长的微信公众号:Java技术栈,回复:福利,可以免费获取一份我整理的 2020 最新 Java 面试题,真的非常全(含答案),无任何套路。

    展开全文
  • web容器tomcatundertow性能测试对比

    千次阅读 2017-06-21 12:05:00
    web容器tomcatundertow性能测试对比
  • 1. springboot默认使用Tomcatspring boot 完美集成了tomcat,jetty和undertow,默认使用Tomcat做为服务器web其启动日志以下spring 2. 使用Undertow作服务器2.1 修改pom.xmlorg.springframework.bootspring-boot-...
  • <p>when I switch my underlying service from tomcat to undertow I received an error 500 "At least one forwarded header is required" <p>I use the version 2.0.2 of spring cloud gateway 2.0.2.</p>...
  • ###Undertow(SpringBoot内置版)篇 ####J...
  • SpringBoot 内置了三种servlet 容器供大家选择,默认的是tomcat,说明它还是大众最多的选择。...Spring Boot 内嵌 Jetty , Tomcat , Undertow , 默认是Tomcat 若使用Undertow 修改pom.xml配置 ...
  • TomcatUndertow并发性能对比

    千次阅读 2018-07-12 07:35:13
    Undertow(SpringBoot内置版)篇JVM参数:-Xms1024m-Xmx1024m测试参数:压测工具,参数最大化,连续测试10分钟,得出各种曲线。 软件架构:JDK1.8SpringBoot全家桶,version1.4.2SpringMVCFreemarkerUndertow(内置)...
  • 在说undertowtomcat区别之前,先说下tomcat是什么 tomcat是一个轻量级应用服务器, 是支持运行Servlet/JSP应用程序的容器,运行在jvm上,虽说是tomcat服务器,但是并不是真正的硬件,它是部署在电脑上的软件服务。...
  • spring boot 完美集成了tomcat,jetty和undertow,默认使用Tomcat作为服务器 其启动日志如下 使用Undertow做服务器 1 修改pom.xml &amp;amp;amp;lt;dependency&amp;amp;amp;gt; &amp;amp;amp;lt;...
  • spring boot下比较tomcatundertow性能

    万次阅读 2017-06-07 11:44:52
    springboot性能优化--为啥要将servlet变成undertow,实验结果证明,undertowtomcat性能稳定,提升不少,不论是初始化时堆内存、线程数,还是用jmeter测试并发时。
  • Spring Boot 在关闭时,如果有请求没有响应完,在不同的容器会出现不同的结果,例如,在 TomcatUndertow 中会出现中断异常,那么就有可能对业务造成影响。所以,优雅停机非常有必要性,目前官方是没有提供很好的...
  • 目录查看内置web容器切换至Tomcat容器切换至Jetty容器切换至Netty容器切换至...spring-boot-autoconfigure-2.3.2.RELEASE.jar 找到下面的embedded包,可以看到以下4种容器:Jetty,Netty,TomcatUndertow
  • TomcatUndertow的性能做对比,确定生产环境调优参数 测试工具 压测工具:jmeter jvm监控工具:visualvm 测试过程: 设置jmeter的线程组参数,设置如下:100个线程,每个线程发起100个请求,线程启动间隔是1秒 ...
  • tomcat jetty undertow 容器比较 为什么很多 SpringBoot 开发者放弃了 Tomcat,选择了 Undertow? SpingBoot中我们既可以使用Tomcat作为Http服务,也可以用Undertow来代替。 Undertow在高并发业务场景中,性能...
  • 版权声明: https://blog.csdn.net/weixin_38187317/article/details/81532560说明undertow,jetty和tomcat可以说是javaweb项目当下最火的三款服务器,tomcat是apache下的一款重量级的服务器,不用多说历史悠久,经得...
  • 没有比较就没有伤害!Web 容器我们用的最多的还是 ...Spring WebFlux支持Netty,UndertowTomcat,Jetty和Servlet 3.1+容器。他们都适用于一个通用的Reactive Streams API。Spring WebFlux编程模型基于该通用API。 S
  • spring boot内置容器性能比较(Jetty、TomcatUndertow) 一、准备工作 1.1 服务器环境 名称 配置 服务器操作系统 Ubuntu 18.04.2 LTS 内存 15.4 GiB 处理器 Intel® Core™ i7-7560U CPU @ 2.40GHz × 4...
  • 使用了Spirngboot构建,有一个定时任务系统会通过http每隔10秒的频率请求这个系统,为了使微服务系统更加轻量级,提高性能,所以打算移除SpringMvc相关组件以及Tomcat,Jetty,Undertow等Web容器,使用Netty构建...
  • 官方说:For servlet stack applications, the spring-boot-starter-web includes Tomcat by including spring-boot-starter-tomcat, but you can use spring-boot-starter-jetty or spring-boot-starter-undertow ...
  • 我这边测试发现,spring boot 2.1.6的Tomcatundertow性能没多大差异,可能业务层的调用导致了测试的结果。具体性能要更具实际业务来对比,这样才能提高业务的处理能力。 嵌入式Web服务器 每个SpringBootWeb...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 978
精华内容 391
热门标签
关键字:

tomcatundertow