undertow,jetty和tomcat可以说是javaweb项目当下最火的三款服务器,当下微服务兴起,spring boot ,spring cloud 越来越热的情况下,选择一款轻量级而性能优越的服务器是必要的选择。spring boot 完美集成了tomcat,jetty和undertow。
性能比较:
Undertow,Tomcat和Jetty服务器配置详解与性能测试
1. SpringBoot引入依赖
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-tomcat
org.springframework.boot
spring-boot-starter-undertow
2. 相关配置
server:
port: 8011
undertow:
# 设置 HTTP POST 内容的最大长度,默认不做限制
## max-http-post-size: -1
# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程,数量和CPU 内核数目一样即可
io-threads: 8
# 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载 io-threads*8
worker-threads: 64
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
# 每块buffer的空间大小,越小的空间被利用越充分
buffer-size: 1024
# 每个区分配的buffer数量 , 所以pool的大小是buffer-size * buffers-per-region
# buffers-per-region: 1024 # 这个参数不需要写了
# 是否分配的直接内存
direct-buffers: true
3. Undertow线程数的配置
Undertow认为它的运用场景是在IO密集型的系统应用中,并且认为多核机器是一个比较容易满足的点,Undertow初始化假想应用的阻塞系数在0.8~0.9之间,所以阻塞线程数直接乘了个8,当然,如果对应用较精确的估测阻塞系数,可以配置上去,
ioThreads = Math.max(Runtime.getRuntime().availableProcessors(), 2);
workerThreads = ioThreads * 8;
如果项目运行一段时间后发现http存在超时或者获取http连接比较耗时的情况,可以适当的加大workerThreads
线程配置。
推荐阅读
后续之《SpringBoot服务器压测对比(jetty、tomcat、undertow)》
undertow在github的源码
Spring Boot 内嵌容器Undertow参数设置
Spring boot 中 Undertow 配置线程数
线程数设多少合适??
Docker环境Spring Boot应用undertow大量http请求超时