- undertow,jetty 和 Tomcat 可以說是 javaweb 項目當下最火的三款服務器,Tomcat 是 apache 下的一款重量級的服務器,不用多說歷史悠久,經得起實踐的考驗。
- 然而:當下微服務興起,Spring boot ,Spring cloud 越來越熱的情況下,選擇一款輕量級而性能優越的服務器是必要的選擇。Spring boot 完美集成了 Tomcat,Jetty 和 undertow,本文將通過對 Jetty 和 undertow 服務器的分析以及測試,來比較兩款服務器的性能如何。
- 值得一提的是 Jetty 和 undertow 都是基於 NIO 實現的高並發輕量級的服務器,支持 servlet3.1 和 WebSocket。
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/