springboot集成tomcat, jetty, undertow服务器吞吐量对比

springboot集成tomcat, jetty, undertow服务器吞吐量对比

一,undertow介绍

undertow简介:

Undertow是RedHAT红帽公司开源的产品,采用java开发,是一款灵活,高性能的web服务器,提供了NIO的阻塞/非阻塞APIS,也是Wildfly的默认Web容器。

在javaweb容器的世界里,tomcat和jetty是大众熟知的,undertow目前逐步进入大众的视角,它是一款能和tomcat媲美的神器,在性能方面吊打tomcat。

目前Undertow已经成为springboot 默认集成的三大容器之一。

undertow特点

Undertow在高并发业务场景中,性能优于tomcat

1,高性能在多款同类产品的压测种,在高并发情况下表现出色。

2,Servlet4.0支持,它提供了对Servlet4.0的支持。

3,Web Socket完全支持,包含JSR-356,用以满足Web应用巨大数量的客户端。

4,内嵌式,它不需要容器,只需要通过api即可快速搭建Web服务器。

5,灵活性交由链式Handler配置和处理请求,可以最小化按需加载模块,无须加载多余功能。

6,轻量级,它是一个内嵌Web服务器,由两个核心jar包组成。

springboot集成的web服务器版本

2.2.13.RELEASE springboot版本默认支持的三种Servlet容器版本如下

2.2.13.RELEASE springboot版本(官网提供的)

Web服务器

集成版本

Undertow

2.0.33.Final

tomcat

9.0.41

jetty

4.1.17

二,实验过程

1,springboot版本

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

2,测试类的controller

 @RequestMapping("/reflect")
    @ResponseBody
    public void reflect() {
        String body = "hello in body";
        User user = new User();
        user.setAge(10L);
        user.setId(10L);
        user.setName("name");
        user.setSchool("school");
        user.setUid("uid");
        Object[] params = {user,body};

        long begin = System.currentTimeMillis();
        Object object = springReflectionUtil.springInvokeMethod("reflectService", "handleUser", params);
        if (object instanceof User) {
            User invoke = (User)object;
            System.out.println("返回结果============"+invoke.toString());
        }
        long end = System.currentTimeMillis();
        System.out.println("game over cost="+(end-begin));

    }

3,springboot默认就内嵌了tomcat

4,项目整合undertow

在pom文件中引入以下依赖

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>
        <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>

5,项目整合jetty

       <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-jetty</artifactId>
        </dependency>

6,jvm配置

-javaagent:D:\apache-skywalking-apm-es7-8.4.0\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
-Dskywalking.agent.service_name=my-service
-Dskywalking.collector.backend_service=127.0.0.1:11800
-Djava.net.preferIPv4Stack=true
-server
-Xms4096m
-Xmx4096m
-XX:+UseG1GC

7,用jmeter压测

100个线程 循环1000次

1000个线程 循环100次

8,实验结果

tomcat

100线程循环1000次

1000线程循环100次

jetty

100线程循环1000次

1000线程循环100次

undertow

100线程循环1000次

1000线程循环100次

通过三张压测结果图统计如下

100线程循环1000次(吞吐量/sec)

第一次

第二次

第三次

平均值

Tomcat

1119.7

1497.5

1490.5

1369.2

jetty

1363.7

1429.3

1390.5

1394.5

undertow

1607.9

1467.3

1545.6

1540.3

1000线程循环100次(吞吐量/sec)

第一次

第二次

第三次

平均值

Tomcat

1212.2

1088.4

1107.5

1136.0

jetty

1225.9

1222.6

1186.3

1211.6

undertow

1383.7

1468.1

1434.2

1428.7

三,实验结论:

100个线程 循环1000次,都用默认配置,没有调配置参数情况下
tomcat的吞吐量平均是每秒1369.2,jetty的吞吐量是1394.5,undertow的吞吐量是每秒1540.3

1000个线程 循环100次,都用默认配置,没有调配置参数情况下

tomcat的吞吐量平均是每秒1136.0,jetty的吞吐量是1211.6,undertow的吞吐量是每秒1428.7

可以看出,默认配置情况下,undertow的吞吐量领先于jetty和tomcat.,undertow>jetty>tomcat

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
回答: 要在Spring Boot中集成Jetty容器,你需要先排除掉默认的Tomcat容器,然后引入Jetty的starter。在pom.xml文件中,你可以找到spring-boot-starter-web这个starter,并排除掉spring-boot-starter-tomcat的依赖。同时,你需要引入spring-boot-starter-jetty的依赖。下面是一段示例代码,展示了如何在pom.xml中进行配置: ```xml <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-jetty</artifactId> </dependency> ``` 这样配置之后,Spring Boot就会使用Jetty作为你的应用程序的容器。注意,这只是配置的一种方式,具体的配置方式可能因项目而异。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [SpringBoot:配置Jetty容器|超级详细,建议收藏](https://blog.csdn.net/weixin_43970743/article/details/130385691)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Spring Boot 集成 Jetty](https://blog.csdn.net/weixin_34050427/article/details/88188521)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值