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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM