Tomcat、Jetty、Undertow、Netty 等容器的区别

  • undertow,jetty 和 Tomcat 可以说是 javaweb 项目当下最火的三款服务器,Tomcat 是 apache 下的一款重量级的服务器,不用多说历史悠久,经得起实践的考验。
  • 然而:当下微服务兴起,Spring boot ,Spring cloud 越来越热的情况下,选择一款轻量级而性能优越的服务器是必要的选择。Spring boot 完美集成了 Tomcat,Jetty 和 undertow,本文将通过对 Jetty 和 undertow 服务器的分析以及测试,来比较两款服务器的性能如何。
  • 值得一提的是 Jetty 和 undertow 都是基于 NIO 实现的高并发轻量级的服务器,支持 servlet3.1 和 WebSocket。

image.png

728 x 198 730 x 199

 

因此: SpringBoot 使用轻量级的 undertow 容器替代重量级 Tomcat,支持 HTTP2.0,性能更好,稳定性更好

  • pom.xml 配置如下:
 <!-- 添加spring-boot-starter-web,默认使用tomcat作为web容器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- 去除tomcat,将undertow作为容器 -->
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>

 

 
 
application.properties 配置如下
 
server:
  undertow:
    # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
    # 不要设置过大,如果过大,启动项目会报错:打开文件数过多
    io-threads: 8
    # 阻塞任务线程池, 当执行类似servlet请求阻塞IO操作, undertow会从这个线程池中取得线程
    # 它的值设置取决于系统线程执行任务的阻塞系数,默认值是IO线程数*8
    worker-threads: 64
    # 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
    # 每块buffer的空间大小,越小的空间被利用越充分,不要设置太大,以免影响其他应用,合适即可
    buffer-size: 1024
    # 是否分配的直接内存(NIO直接分配的堆外内存)
    direct-buffers: true

 


作者:sumoonyoko
链接:https://ld246.com/article/1575252759539
来源:链滴
协议:CC BY-SA 4.0 https://creativecommons.org/licenses/by-sa/4.0/

posted @ 2020-12-03 11:21  深水是沉默  阅读(4910)  评论(0编辑  收藏  举报