springboot undertow替換tomcat方式

版權聲明: https://blog.csdn.net/weixin_38187317/article/details/81532560
說明
        undertow,jetty和tomcat能夠說是javaweb項目當下最火的三款服務器,tomcat是apache下的一款重量級的服務器,不用多說歷史悠久,經得起實踐的考驗。然而:當下微服務興起,spring boot ,spring cloud 愈來愈熱的狀況下,選擇一款輕量級而性能優越的服務器是必要的選擇。spring boot 完美集成了tomcat,jetty和undertow,本文將經過對jetty和undertow服務器的分析以及測試,來比較兩款服務器的性能如何。java

  值得一提的是jetty和undertow都是基於NIO實現的高併發輕量級的服務器,支持servlet3.1和websocket。因此,有必要先了解下什麼是NIO。web

NIO(非阻塞式輸入輸出)spring

Channel
Selector
Buffer
Acceptor
  Client和Server只向Buffer讀寫數據不關注數據的流向,數據經過Channel通道進行流轉。而Selector是存在與服務端的,用於Channel的註冊以此實現數據I/O操做。Acceptor負責接受因此的鏈接通道而且註冊到Channel中。而整個過程客戶端與服務端是非阻塞的也就是異步操做。apache

下面是壓力測試對比圖:tomcat

服務器     命中   成功率   吞吐量                     平均耗時
Jetty        11488 100%     96.25 trans/sec      0.00sec
               18393 100%     153.92 trans/sec    0.01sec
                21484 99.99% 179.51 trans/sec    0.01sec
Undertow 11280 100%    94.02 trans/sec      0.00sec
                19442 100%    163.35 trans/sec    0.01sec
                23277 100%    195.54 tran/sec      0.01sec
Tomcat    10845 100%     90.95 trans/sec      0.02sec
                21673 99.98% 181 trans/sec         0.01sec
                25084 99.98% 209.10 trans/sec    0.01sec
從中能夠看出在高負載下Undertow的吞吐量高於Jetty並且隨着壓力增大Jetty和Undertow成功率差距會拉大。而在負載不是太大狀況下服務器處理能力差很少,jetty還略微高於Undertow。而tomcat的負載能力彷佛和Undertow很接近。服務器

  對比三個服務器發如今Undertow在負載太重狀況下比Jetty和Tocmat更加頑強,實踐證實在負載繼續加大狀況下Undertow的成功率高於其它二者,可是在併發不是太大狀況下三款服務器總體來看差異不大。websocket

快速開始
更新pom.xml文件:併發

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

 



<!-- 下面的配置將使用undertow來作服務器而不是tomcat -->app

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

 


application.yml配置:異步

server: port: 8081 # 下面是配置undertow做爲服務器的參數 undertow: # 設置IO線程數, 它主要執行非阻塞的任務,它們會負責多個鏈接, 默認設置每一個CPU核心一個線程 io-threads: 4 # 阻塞任務線程池, 當執行相似servlet請求阻塞操做, undertow會從這個線程池中取得線程,它的值設置取決於系統的負載 worker-threads: 20 # 如下的配置會影響buffer,這些buffer會用於服務器鏈接的IO操做,有點相似netty的池化內存管理 # 每塊buffer的空間大小,越小的空間被利用越充分 buffer-size: 1024 # 是否分配的直接內存 direct-buffers: true配置比較簡單,和tomcat使用基本同樣,而後就能夠快樂的使用undertow啦~

相關文章
相關標籤/搜索