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