Spring Boot 嵌入式容器性能对决:Tomcat vs Undertow!

发布于:2025-04-06 ⋅ 阅读:(12) ⋅ 点赞:(0)

引言

在现代应用开发中,选择合适的嵌入式容器对于提升应用的性能和响应性至关重要。Spring Boot 提供了多种嵌入式容器选项,其中最常用的是 Tomcat 和 Undertow。本文将深入探讨这两种容器的理论基础,并通过详细的性能测试代码和分析,帮助你选择最适合你应用的最佳容器。

在这里插入图片描述

理论基础

嵌入式容器

Spring Boot 支持多种嵌入式容器,包括 Tomcat、Jetty 和 Undertow。这些容器可以作为独立的服务器运行,也可以嵌入到 Spring Boot 应用中,简化部署过程。

Tomcat

Apache Tomcat 是最常用的 Java Servlet 容器之一,广泛应用于企业级应用。Tomcat 是一个成熟的、功能丰富的容器,支持 JSP 和 Servlet 规范。
优点
成熟稳定:经过长期验证,性能稳定。
功能丰富:支持 JSP 和 Servlet 规范,功能全面。
社区支持:拥有庞大的用户社区和丰富的文档支持。
缺点
资源消耗:相对于其他轻量级容器,资源消耗较大。

Undertow

Undertow 是一个高性能的、非阻塞的 Java Web 服务器和 Servlet 容器。Undertow 专为高并发和低资源消耗而设计。
优点
高性能:非阻塞 I/O 模型,支持高并发。
低资源消耗:内存占用低,适合资源受限的环境。
模块化:支持模块化配置,灵活性高。
缺点
社区支持:相对于 Tomcat,社区支持较小。
功能相对较少:不支持 JSP 和一些高级 Servlet 功能。

实战性能测试

配置 Tomcat 和 Undertow

Tomcat在 pom.xml 文件中添加以下依赖:

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

Undertow在 pom.xml 文件中添加以下依赖:

<dependencies>
    <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>
</dependencies>

创建测试控制器

创建一个简单的控制器来处理 HTTP 请求。

   /**
    * sayHello
    * @author senfel
    * @date 2025/4/3 16:11 
    * @return java.lang.String
    */
   @GetMapping("/hello")
   public String sayHello() {
       return "Hello, World!";
   }

使用Jmeter压测

使用线程组
线程数:10000
循环次数:100
Ramp-Up 期:1 秒

使用 Tomcat
吞吐量:12000 请求/秒
在这里插入图片描述

使用 Undertow
吞吐量:16000 请求/秒
在这里插入图片描述

总结

通过本文,已经了解到了 Tomcat 和 Undertow 的理论基础,并通过详细的性能测试代码和分析对比了它们的性能。Tomcat成熟稳定,功能丰富,适合企业级应用;Undertow高性能,低资源消耗,适合高并发和资源受限的环境。